在multimap中按值搜索
Search by value in a multimap
考虑一个multimap multimap<int,pair<int,int>> edges
,谁能帮助我在如何搜索edges
中给定对(例如make_pair(1,2))的位置?谢谢你的帮助!
std::multimap
仅按其Key
进行索引。虽然您可以按值搜索,但这将是线性搜索(没有按键搜索效率高)。我建议你购买Boost。Bimap和Boost.MultiIndex。尽管如此,要按键搜索,您可以这样做:
template<typename Map, typename Val = typename Map::value_type>
auto find_by_key(Map& mp, Val val){
return std::find_if(mp.begin(), mp.end(), [](auto& kv){ return kv.second == val; });
}
没有什么比使用标准算法std::find_if
的线性搜索更好的了。:)
#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <utility>
int main()
{
std::unordered_map<int, std::pair<int, int>> edges =
{
{ 1, { 1, 1 } }, { 2,{ 2, 2 } }, { 3, { 3, 3 } }
};
auto it = std::find_if( edges.begin(), edges.end(),
[p = std::make_pair( 2, 2 )]( const auto &value )
{
return value.second == p;
});
std::cout << it->second.first << ' '
<< it->second.second << std::endl;
return 0;
}
程序输出为
2 2
或者如果你的编译器不支持这样的lambda表达式记录,那么你可以这样重写
auto p = std::make_pair( 2, 2 );
auto it = std::find_if( edges.begin(), edges.end(),
[&]( const auto &value )
{
return value.second == p;
});
std::cout << it->second.first << ' '
<< it->second.second << std::endl;
相关文章:
- 使用std::multimap迭代器创建std::list
- 有根的二进制搜索树.保留与其父级的链接
- 在C++中搜索嵌套多映射值
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 正在尝试重载二进制搜索树分配运算符
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 向量上的线性搜索
- 如何在动态数组上使用搜索函数
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- cmake:添加要搜索头文件的目录
- 使用C++创建特殊的二叉搜索树
- 在C++的字符串中搜索和删除某些字符
- std::unordered_map 搜索算法是如何实现的?
- 使用不变量来确定二分搜索中的边界条件
- 二叉搜索如何比线性搜索更快?
- 按边长度递归搜索图中所有可行路径
- 在multimap中按值搜索
- 以相反顺序搜索multimap