2017-09-25 81 views
0

我试图用std::map::count()在字典中查找一个值,它是一个自定义结构体。下面的代码不会编译在std :: map中查找结构体的值

typedef struct myStruct 
{ 
    int x; 
    int y; 
}MyStruct; 

MyStruct instace; 
instace.x = 0; 
instace.y = 1; 

map<unsigned int, myStruct> myMap; 
myMap[0] = instace; 
if(myMap.count(instace) == 1) 
{ 
    //do something 
} 

,这是错误我得到

no instance of overloaded function "std::map<_Kty, _Ty, _Pr, _Alloc>::count 
[with _Kty=unsigned int, _Ty=myStruct, _Pr=std::less<unsigned int>, 
_Alloc=std::allocator<std::pair<const unsigned int, myStruct>>]" matches the 
argument list 

我觉得编译器不知道如何比较我的结构。在地图的声明中的第三个参数需要一个比较功能,我试图创造一个比较功能,并把它传递给第三个参数的声明类似下面的

struct comparer 
{ 
    bool operator()(MyStruct const& Left, MyStruct const& Right) const { 
    return (Left.x == Right.x && Left.y == Right.y); 
    } 
}; 

map<unsigned int, myStruct, comparer> myMap; 

但是当我做myMap.count(),我得到类似的错误。

我搜索谷歌使用各种可能的方式,我可以描述的问题,但我没有找到答案。有人能告诉我如何解决这个问题吗? 谢谢!

+5

'map :: count'是一个键,而不是一个值。您可以通过'unsigned int'类型的键在'myMap'中查找条目。如果你想把'MyStruct'作为一个键,那么它应该是'std :: map'的第一个模板参数。你想映射到什么? –

+0

哦,我得到了一些根本性的错误。感谢您指出。 – Pracka

+0

您仍然可以遍历整个地图,但可能会有超过1个匹配项。 – user1095108

回答

2

看着std::map::count,count采用键并返回与该键关联的元素数。这意味着你的代码应该是:

if(myMap.count(0) == 1) // for key == 0