我想使用指定的equal_to函数int unordered_set
示例代码如下:
struct myEqual
{ //string with one different character is considered equal
bool operator()(const string &s1, const string &s2)const
{
if(s1.length() != s2.length()) return false;
int dis = 0;
for(unsigned int i = 0; i<s1.size(); i++)
{
if(s1[i] != s2[i])
{
dis++;
if(dis >= 2) return false;
}
}
return true;
}
};
int main()
{
unordered_set<string, std::tr1::hash<string>, myEqual> myDict;
myDict.insert("a");
myDict.insert("b");
myDict.insert("c");
unordered_set<string, std::tr1::hash<string>, myEqual>::iterator it = myDict.find("k");
if(it == myDict.end())
{
cout<<"myequal not work"<<endl;
}
else
{
cout<<*it<<endl;
}
return 0;
}
根据myEqual函数,存在三个等于“k”的值“a”,“b”,“c”,但是find只返回一个迭代器。
无论如何,有没有找到所有相等的值(value)?
最佳答案
这里有两个问题,这两个问题都不与查找元素有关:
"a"
,"b"
和"c"
彼此相等,因此您只能在unordered_set
中保留其中之一。 需要记住的一个更普遍的问题是您的等效关系不是传递的:
"aa"
等于"ab"
,而"ab"
等于"bb"
。但是"aa"
不等于"bb"
。关于c++ - 使用find在unordered_set中查找多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14858234/