我有一个名为buttonValues的C ++地图,如下所示。
map<int, int> buttonValues;
我将一些数据放入我的地图中,如下所示。
buttonValues.insert(std::pair<int, int>(0, 1));
buttonValues.insert(std::pair<int, int>(1, 3));
buttonValues.insert(std::pair<int, int>(2, 0));
我想要做的是在第二列中搜索值0,如果在第二列中找到0,则返回第一列中的值。在这个例子中,我想要返回的值是2.到目前为止,我相信我可以在第二列中搜索0:
buttonValues.find(0)->second
但是,如何获取第一列中对应的值?
由于 Calum
答案 0 :(得分:1)
buttonValues.find(0)->second
会为您提供与密钥0
对应的值(“第2列”)。在您的示例中,它将返回1
。您需要遍历地图并查找值= 0
,然后返回密钥:
for (const auto& keyval : buttonValues) // Look at each key-value pair
{
if (keyval.second == 0) // If the value is 0...
{
return keyval.first; // ...return the first element in the pair
}
}
你可以将它放在一个函数中。请注意,地图具有唯一键,但不一定是唯一值。所以你应该处理你有多个键的情况,其值为0
。
答案 1 :(得分:1)
这样的事情:
for ( auto X : map_name )
if ( X.second == 0 )
return X.first;
std::pair<>
包含地图中第一列和第二列的值。您可以遍历所有对并检查第二个值以获得所需的值。
答案 2 :(得分:0)
实际上,从性能的角度来看,不建议从地图中按值搜索关键字,时间复杂度是线性时间O(N)
。如果您从地图中按键搜索值,那么它将是&#39; O(logN)&#39;。您可以考虑构建反向地图,或multimap
,甚至unordered_map
/ unordered_multimap
取决于您的使用案例。