Как сделать функцию map.find () с помощью std :: pair - PullRequest
0 голосов
/ 22 апреля 2019

Я получаю эту ошибку, пытаясь сделать map.find (10,20), знает ли кто-нибудь, как это сделать

Error (active)  E0304   no instance of overloaded function "std::map<_Kty, 
_Ty, _Pr, _Alloc>::find [with _Kty=std::pair<int, int>, _Ty=std::tuple<int, int, int>, _Pr=std::less<std::pair<int, int>>, 
_Alloc=std::allocator<std::pair<const std::pair<int, int>, std::tuple<int, int, int>>>]" matches the argument list  Maps    
#include <iostream>
#include <map>
#include <string>


int main()
{
    std::map<std::pair<int, int>,std::tuple<int,int,int>> myMap;
    // Inserting data in std::map
    myMap[std::make_pair(10, 20)] = std::make_tuple(1,2,3);

    auto it = myMap.cbegin();
    for (auto const& it : myMap){ 
        std::cout << it.first.first << it.first.second << std::get<0>(it.second); 

    }


    auto search = myMap.find(10,20);
    return 0;
}

1 Ответ

1 голос
/ 22 апреля 2019

Вам нужен ключ std::pair, а не два int s. Когда вы вставили элемент, вы правильно использовали std::make_pair. Вам нужно будет сделать то же самое с функцией-членом find или, как упоминалось в комментариях, обернуть ключ в фигурные скобки. Оба делают одно и то же; первый более явный, во втором случае вы полагаетесь на неявное преобразование в std::pair.

auto search = myMap.find(std::make_pair(10, 20));

или

auto search = myMap.find({10, 20});
...