Make build/include_what_you_use more consistent

`std::string` has some logic to omit the suggestion if it is used in
non-STL namespaces, so the same check should be OK to use for other
types. Closes #157.
diff --git a/cpplint/cpplint.py b/cpplint/cpplint.py
index f4b1113..6201b30 100755
--- a/cpplint/cpplint.py
+++ b/cpplint/cpplint.py
@@ -5433,8 +5433,13 @@
       continue
 
     for pattern, template, header in _re_pattern_templates:
-      if pattern.search(line):
-        required[header] = (linenum, template)
+      matched = pattern.search(line)
+      if matched:
+        # Don't warn about IWYU in non-STL namespaces:
+        # (We check only the first match per line; good enough.)
+        prefix = line[:matched.start()]
+        if prefix.endswith('std::') or not prefix.endswith('::'):
+          required[header] = (linenum, template)
 
   # The policy is that if you #include something in foo.h you don't need to
   # include it again in foo.cc. Here, we will look at possible includes.
diff --git a/cpplint/cpplint_unittest.py b/cpplint/cpplint_unittest.py
index 07a443f..fad9013 100755
--- a/cpplint/cpplint_unittest.py
+++ b/cpplint/cpplint_unittest.py
@@ -950,6 +950,11 @@
         'Add #include <hash_map> for hash_map<>'
         '  [build/include_what_you_use] [4]')
     self.TestIncludeWhatYouUse(
+        """#include "base/containers/hash_tables.h"
+          base::hash_map<int, int> foobar;
+        """,
+        '')
+    self.TestIncludeWhatYouUse(
         """#include "base/foobar.h"
            bool foobar = std::less<int>(0,1);
         """,