117 lines
4.1 KiB
C++
117 lines
4.1 KiB
C++
|
#include <iostream>
|
||
|
#include <map>
|
||
|
#include <string>
|
||
|
|
||
|
#ifdef __GNUC__
|
||
|
#include <ext/hash_map>
|
||
|
#else
|
||
|
#include <hash_map>
|
||
|
#endif
|
||
|
|
||
|
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||
|
#include <unordered_map>
|
||
|
#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<std::string, std::string> 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<std::string, std::string> 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<std::string, std::string> 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;
|
||
|
}
|