.....
#include <boost/unordered/unordered_map.hpp >
typedef boost::unordered_map<int, std::list<int> > hashListObjectBase_sjh;
int main()
{
hashListObjectBase_sjh con;
con[0].push_back(3);
//아래와 같이 컨테이너타입을 알아올 수 있다
hashListObjectBase_sjh::value_type::second_type::iterator begin = con[0].begin();
std::cout<<*begin<<std::endl; //출력결과는 3이 나온다
return 0;
}
unorderad_map 해쉬구조 탐색하여 값 조사
결과창
http://blog.naver.com/sorkelf/40136119399
http://blog.naver.com/chriskr7/60182014718
[C++11] unordered_map performance
[출처] [C++11] unordered_map performance|작성자 LaZy개발자
짬을 이용해서 이번에 사용했던 놈을 소개할 까 합니다. std::map하고 performance면에서 차이가 많습니다. 이번에 BMT 관련해서 std::map을 이놈으로 바꾸니 find부분에서 속도가 33%정도 향상되네요.
단순히 테스트를 위해 읽을 파일 형성하는 소스입니다. [-] Collapse #include <iostream> #include <ctime> #include <cstdlib> #include <fstream> #include <memory.h> using namespace std; void make_word(char* cbuf){ int len = rand() % 6 + 1; cbuf[len] = 0x00; for(int i = 0; i <len; i++) cbuf[i] = 'a' + rand() % 26; } int main(void){ char word[7]; int cnt = 0; ofstream out("c:/test/words.txt"); memset(word, 0x00, 7); srand((unsigned)time(NULL)); while(cnt++ < 10000){ make_word(word); out << word; memset(word, 0x00, 7); make_word(word); out << '\t' << word <<endl; } out.close(); return 0; }
실질적으로 unordered_map을 테스트 하는 소스입니다. [-] Collapse #include <iostream> #ifdef __GNUC__ #include <tr1/unordered_map> using namespace std::tr1; #else #include <unordered_map> #endif #include <map> #include <cstdlib> #include <string> #include <time.h> #include <vector> #include <fstream> using namespace std; clock_t start_time, end_time; typedef map<std::string, std::string> TIntMap; typedef pair<std::string, std::string> TIntPair; typedef unordered_map<std::string, std::string> TUnIntMap; int main() { TIntMap iMap; TUnIntMap uMap; TIntMap::iterator ip; TUnIntMap::iterator up; vector<std::pair<std::string, std::string>> v; ifstream in("c:/test/words.txt"); if(!in) { cerr << "cannot find the file" <<endl; exit(EXIT_FAILURE); } string key, value; for(int i = 0; i <10000; i++) { in >> key >> value; v.push_back(std::make_pair(key, value)); } // std::map Insertion start_time = clock(); for(int i = 0; i < v.size(); i++){ iMap.insert(v[i]); } end_time = clock(); cout << "std::map insertion time elapsed : " << ((double)(end_time-start_time)/CLOCKS_PER_SEC) << endl; // std::unordered_map Insertion start_time = clock(); for(int i = 0; i < v.size(); i++){ uMap.insert(v[i]); } end_time = clock(); cout << "std::unordered_map insertion time elapsed : " << ((double)(end_time-start_time)/CLOCKS_PER_SEC) << endl; srand((unsigned)time(NULL)); start_time = clock(); for(int i = 0; i < 1000000; i++) { string key = v[rand()%10000].first; ip = iMap.find(key); } end_time = clock(); cout << "std::map find time elapsed : " << ((double)(end_time-start_time)/CLOCKS_PER_SEC) << endl; srand((unsigned)time(NULL)); start_time = clock(); for(int i = 0; i < 1000000; i++) { string key = v[rand()%10000].first; up = uMap.find(key); } end_time = clock(); cout << "std::unorderd_map find time elapsed : " << ((double)(end_time-start_time)/CLOCKS_PER_SEC) << endl; in.close(); return 0; }
결과입니다. 제 PC에서 한거고요.. server에서 했을때도 속도는 거의 2.5~4배 차이가 납니다.
[출처] [C++11] unordered_map performance|작성자 LaZy개발자 |
[출처] boost::unordered_map, unordered_set|작성자 풍풍풍
'메타프로그래밍 > Boost::' 카테고리의 다른 글
boost::pool (0) | 2013.05.11 |
---|---|
boost::dynamic_bitset (0) | 2013.03.08 |
boost::bind, boost::mem_fn, boost::ref 조합 (0) | 2013.03.01 |
boost::bind & ref, cref (0) | 2013.02.28 |
boost::circular_buffer (0) | 2013.02.26 |