キー

2017-02-02 3 views
1
としてタプルの一部の検索マップ

は、すべてのキーのマップを検索することが可能であり、Cにおけるタプルの一部が含まれている値のペア++キー

たとえば、私はのタプルを使用して順不同マルチマップを持っています < "abc"は問題ではありません。重要ではありません>

私はequals rangeとequals関数を見てきましたが、それが私が探しているものだと思います。私は遠くのforループを使ってマップ全体を反復することができると確信していますが、可能ならばそれをやりたいとは思いません。

答えて

1

タプルはすべてのオブジェクトを使用してハッシュを生成するので、元のマップだけでこれを行うことはできません。次のようにすることができます:

std::unordered_map<std::string, std::tuple< /*type here*/ > *> mapToMap; 

タプルを検索するために使用できる別のマップを保存するために使用できます。

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