【发布时间】:2010-10-05 15:55:18
【问题描述】:
在下面的代码中,hash_map 会自动排序或按排序顺序插入元素。任何想法为什么它会这样做?请给点建议?? 这不是作业问题,试图解决 glassdoor dot com 上发布的面试问题。
#include <iostream>
#include <vector>
#include <ext/hash_map>
#include <map>
#include <string.h>
#include <sstream>
using namespace __gnu_cxx;
using namespace std;
struct eqstr
{
bool operator()(int i, int j) const
{
return i==j;
}
};
typedef hash_map<int, int, hash<int>, eqstr> myHash;
int main()
{
myHash array;
int inputArr[20] = {1,43,4,5,6,17,12,163,15,16,7,18,19,20,122,124,125,126,128,100};
for(int i=0;i<20;i++){
array[inputArr[i]] = inputArr[i]; //save value
}
myHash::iterator it = array.begin();
int data;
for (; it != array.end(); ++it) {
data = it->first;
cout << ":: " << data;
}
}
//!Output ::: 1:: 4:: 5:: 6:: 7:: 12:: 15:: 16:: 17:: 18:: 19:: 20:: 43:: 100:: 122:: 124:: 125:: 126:: 128:: 163
【问题讨论】:
-
operator()没有实现为return i == j;的任何原因? -
hash_map不是标准 C++。 C++0x 等价物是unordered_map。这意味着没有标准的 C++ 要求,完全取决于实现。那么...您使用的是什么平台,hash_map的实现是什么? -
ubuntu 10.04,stl 实现。谢谢大卫
-
嘿 Arun.. 没有任何具体原因。我只是使用了来自 STL::hash_map 实现的相同代码.. 所以不想改变任何东西。
-
谢谢阿伦..我的错..我没有注意我在那里做什么。