是否可以在地图中搜索包含C ++元组部分的所有键值对
例如,我有一个使用元组作为键的无序多图,但我想查找一个元组: <“abc”,没关系,无所谓>
我看过等于范围和等于功能,但我不认为这是我正在寻找的。我很确定我可以使用ranged for循环遍历整个地图,但如果可能的话我宁愿不这样做。
答案 0 :(得分:2)
由于元组使用其存储的所有对象生成哈希,因此您只能使用原始地图执行此操作。你可以这样做:
std::unordered_map<std::string, std::tuple< /*type here*/ > *> mapToMap;
您可以使用它存储另一个可用于查找元组的地图。
答案 1 :(得分:0)
您可以使用std::for_each
在地图上执行线性搜索。
#include <map>
#include <algorithm>
#include <vector>
#include <tuple>
int main()
{
using MyTuple = std::tuple<std::string, int, int>;
std::multimap<MyTuple, int> myMultimap;
myMultimap.emplace(std::make_tuple("abc", 0, 0), 0);
myMultimap.emplace(std::make_tuple("abc", 1, 5), 1);
myMultimap.emplace(std::make_tuple("abc", 4, 2), 2);
myMultimap.emplace(std::make_tuple("bbb", 0, 0), 3);
myMultimap.emplace(std::make_tuple("ccc", 0, 0), 4);
std::vector<int> searchResult;
std::for_each(myMultimap.begin(), myMultimap.end(),
[&searchResult](std::pair<const MyTuple, int>& element)
{
if (std::get<0>(element.first).compare("abc") == 0)
{
searchResult.push_back(element.second);
}
});
for (auto key : searchResult)
{
std::cout << key << std::endl;
}
return 0;
}
上面的代码将打印出来:
0
1
2