#include #include #include #ifdef __GNUC__ #include #else #include #endif #ifdef __GXX_EXPERIMENTAL_CXX0X__ #include #endif namespace std { using namespace __gnu_cxx; } namespace __gnu_cxx { template<> struct hash< std::string > { size_t operator()( const std::string& x ) const { return hash< const char* >()(x.c_str()); } }; } int main() { std::map stdMap; stdMap["_GLIBCXX_STD"] = "std"; stdMap["_GLIBCXX_BEGIN_NESTED_NAMESPACE"] = "+namespace"; stdMap["_GLIBCXX_BEGIN_NAMESPACE"] = "+namespace"; stdMap["_GLIBCXX_END_NESTED_NAMESPACE"] = "}"; stdMap["_GLIBCXX_END_NAMESPACE"] = "}"; stdMap["_GLIBCXX_END_NAMESPACE_TR1"] = "}"; stdMap["_GLIBCXX_BEGIN_NAMESPACE_TR1"] = "-namespace tr1 {"; stdMap["_GLIBCXX_STD2"] = "2std"; stdMap["_GLIBCXX_BEGIN_NESTED_NAMESPACE2"] = "2+namespace"; stdMap["_GLIBCXX_BEGIN_NAMESPACE2"] = "2+namespace"; stdMap["_GLIBCXX_END_NESTED_NAMESPACE2"] = "2}"; stdMap["_GLIBCXX_END_NAMESPACE2"] = "2}"; stdMap["_GLIBCXX_END_NAMESPACE_TR12"] = "2}"; stdMap["_GLIBCXX_BEGIN_NAMESPACE_TR12"] = "2-namespace tr1 {"; stdMap["_XXGLIBCXX_END_NAMESPACE_TR12"] = "X2}"; stdMap["_XXGLIBCXX_BEGIN_NAMESPACE_TR12"] = "X2-namespace tr1 {"; std::hash_map hashMap; hashMap["_GLIBCXX_STD"] = "std"; hashMap["_GLIBCXX_BEGIN_NESTED_NAMESPACE"] = "+namespace"; hashMap["_GLIBCXX_BEGIN_NAMESPACE"] = "+namespace"; hashMap["_GLIBCXX_END_NESTED_NAMESPACE"] = "}"; hashMap["_GLIBCXX_END_NAMESPACE"] = "}"; hashMap["_GLIBCXX_END_NAMESPACE_TR1"] = "}"; hashMap["_GLIBCXX_BEGIN_NAMESPACE_TR1"] = "-namespace tr1 {"; hashMap["_GLIBCXX_STD2"] = "2std"; hashMap["_GLIBCXX_BEGIN_NESTED_NAMESPACE2"] = "2+namespace"; hashMap["_GLIBCXX_BEGIN_NAMESPACE2"] = "2+namespace"; hashMap["_GLIBCXX_END_NESTED_NAMESPACE2"] = "2}"; hashMap["_GLIBCXX_END_NAMESPACE2"] = "2}"; hashMap["_GLIBCXX_END_NAMESPACE_TR12"] = "2}"; hashMap["_GLIBCXX_BEGIN_NAMESPACE_TR12"] = "2-namespace tr1 {"; hashMap["_XXGLIBCXX_END_NAMESPACE_TR12"] = "X2}"; hashMap["_XXGLIBCXX_BEGIN_NAMESPACE_TR12"] = "X2-namespace tr1 {"; #ifdef __GXX_EXPERIMENTAL_CXX0X__ std::unordered_map unorderedMap; unorderedMap["_GLIBCXX_STD"] = "std"; unorderedMap["_GLIBCXX_BEGIN_NESTED_NAMESPACE"] = "+namespace"; unorderedMap["_GLIBCXX_BEGIN_NAMESPACE"] = "+namespace"; unorderedMap["_GLIBCXX_END_NESTED_NAMESPACE"] = "}"; unorderedMap["_GLIBCXX_END_NAMESPACE"] = "}"; unorderedMap["_GLIBCXX_END_NAMESPACE_TR1"] = "}"; unorderedMap["_GLIBCXX_BEGIN_NAMESPACE_TR1"] = "-namespace tr1 {"; unorderedMap["_GLIBCXX_STD2"] = "2std"; unorderedMap["_GLIBCXX_BEGIN_NESTED_NAMESPACE2"] = "2+namespace"; unorderedMap["_GLIBCXX_BEGIN_NAMESPACE2"] = "2+namespace"; unorderedMap["_GLIBCXX_END_NESTED_NAMESPACE2"] = "2}"; unorderedMap["_GLIBCXX_END_NAMESPACE2"] = "2}"; unorderedMap["_GLIBCXX_END_NAMESPACE_TR12"] = "2}"; unorderedMap["_GLIBCXX_BEGIN_NAMESPACE_TR12"] = "2-namespace tr1 {"; unorderedMap["_XXGLIBCXX_END_NAMESPACE_TR12"] = "X2}"; unorderedMap["_XXGLIBCXX_BEGIN_NAMESPACE_TR12"] = "X2-namespace tr1 {"; #endif for (int i = 0; i < 5; ++i) { const clock_t t = clock(); for (int j = 0; j < 1000000; ++j) stdMap.find("testfindkey"); std::cout << "stdMap " << i + 1 << " : " << clock() - t << std::endl; } std::cout << "/n---------------/n" << std::endl; for (int i = 0; i < 5; ++i) { const clock_t t = clock(); for (int j = 0; j < 1000000; ++j) hashMap.find("testfindkey"); std::cout << "hashMap " << i + 1 << " : " << clock() - t << std::endl; } #ifdef __GXX_EXPERIMENTAL_CXX0X__ std::cout << "/n---------------/n" << std::endl; for (int i = 0; i < 5; ++i) { const clock_t t = clock(); for (int j = 0; j < 1000000; ++j) unorderedMap.find("testfindkey"); std::cout << "unorderedMap " << i + 1 << " : " << clock() - t << std::endl; } #endif return 0; }