搜索元组的一部分作为关键字

时间:2017-02-02 19:17:40

标签: c++ search maps equals unordered-map

是否可以在地图中搜索包含C ++元组部分的所有键值对

例如,我有一个使用元组作为键的无序多图,但我想查找一个元组: <“abc”,没关系,无所谓>

我看过等于范围和等于功能,但我不认为这是我正在寻找的。我很确定我可以使用ranged for循环遍历整个地图,但如果可能的话我宁愿不这样做。

2 个答案:

答案 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