C++ 当第二个元素为 X 时,映射获取第一个元素
C++ Map get first element when second element is X
我有一个名为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
取决于您的用例。
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- C++映射不删除元素
- 打印无序映射的第二个元素,即集合
- 更改多重映射容器中所有元素的键值
- C++ 将元素分配给映射值时访问错误
- 类中的 C++ 全局映射,不要打印 map 元素
- 如何将元素插入和迭代到这种映射.C++
- 将数组的元素插入映射的时间复杂度是多少?
- 如何检查映射值中是否存在元素
- 常量映射和常量元素映射之间的区别
- 映射C++按值排序和插入元素
- 如何为映射和priority_queue编写比较器,其中元素是二维数组
- 访问range_expression中的嵌套元素会返回不完整的映射(段错误)
- 在映射中插入更多元素后,指向 QMap 中元素的指针是否仍然有效?
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 无法将元素添加到 STL 映射
- 索引标准/提升::按结构元素映射