当第二个元素是X时,C ++ Map得到第一个元素

时间:2017-11-20 00:40:26

标签: c++ dictionary find

我有一个名为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

3 个答案:

答案 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取决于您的使用案例。