当第二个元素是 X 时,C++ Map 获取第一个元素

标签 c++ dictionary find

我有一个名为“buttonValues”的 C++ 映射,如下所示。

map<int, int> buttonValues;

我将一些数据放入我的 map 中,如下所示。

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。您需要迭代 map 并查找值 = 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 的键的情况。

关于当第二个元素是 X 时,C++ Map 获取第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383618/

相关文章:

c++ - 在Boost program_options中的配置文件中处理无值选项

c++ - 错误 : anachronistic old-style base class initializer [-fpermissive]

c++ - 如何在 vc 2008 或 vc 2010 Beta 中将对话框栏或对话框放入 Pane

python - 使用正则表达式分组将字符串转换为字典

javascript - 用空数组初始化 JavaScript 字典

c++ - 如何避免捕获的成员在 C++11 的 lambda 表达式中被任意表达式初始化?

file - 需要 bash 脚本来查找(如果存在)小于 7 天的 tar 文件

c++ - 我可以在运行时在 C++ 中更改对象的类型吗

python - 使用包含下划线的字典替换列表值

linux - shell find - 控制文件路径