C++ 当第二个元素为 X 时,映射获取第一个元素

C++ Map get first element when second element is X

本文关键字:元素 映射 获取 第一个 第二个 C++      更新时间:2023-10-16

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

但是,如何获取第一列中对应的值?

谢谢卡鲁姆

buttonValues.find(0)->second将为您提供与键0对应的值("第二列"(。在您的示例中,它将返回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的情况。

像这样:

for ( auto X : map_name )
  if ( X.second == 0 )
    return X.first;

std::pair<>保存地图中第一列和第二列的值。您可以遍历所有对并检查所需的第二个值。

实际上,从性能的角度来看,不建议从地图中按值搜索键,时间复杂度将是线性时间O(N)。如果您从地图中按键搜索值,它将是"O(logN("。您可以考虑构建反向地图或multimap,甚至unordered_map/unordered_multimap取决于您的用例。