在hash_set中,元素不会被排序
下面这个例子中,hash_set的EqualKey必须有特别的设计,不能沿用equal_to,因为此例中的元素是c风格字串,而c风格字串必须使用strcmp来进行比较
下面是具体源码:
#include <hash_set>
#include <iostream>
#include <cstring>
using namespace std;
struct eqstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s1) == 0;
}
};
void lookup(const hash_set<const char*, hash<const char*>, eqstr>& Set, const char* word)
{
hash_set<const char*, hash<const char*>, eqstr>::const_iterator it = Set.find(word);
cout << " " << word << ": "
<< (it != Set.end() ? "Present" : "not Present") << endl;
}
int main(){
hash_set<const char*, hash<const char*>, eqstr> Set;
Set.insert("kiwi");
Set.insert("plum");
Set.insert("apple");
Set.insert("mango");
Set.insert("apricot");
Set.insert("banana");
lookup(Set, "mango");
lookup(Set, "apple");
lookup(Set, "durian");
hash_set<const char*, hash_set<const char*>, eqstr>::const_iterator ite1 = Set.begin();
hash_set<const char*, hash_set<const char*>, eqstr>::const_iterator ite2 = Set.end();
for (; ite1 != ite2; ++ite1)
{
cout << *ite1 << " ";
}
}
最后的执行结构中显示hash_set中的元素并没有被排序,但这并不是一个良好的排序,因为即使排序也应该以元素型别const char*来作为排序对象