PracticeDev/study_cpp/hash_table_test/hash_example_1.cpp

117 lines
4.1 KiB
C++
Raw Permalink Normal View History

2022-12-20 17:31:11 +08:00
#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;
}