Возврат итератора из карты STL при использовании объекта в качестве ключа - PullRequest
2 голосов
/ 20 февраля 2012

У меня проблема с возвратом итератора из карты STL с использованием объекта в качестве ключа.

Код компилируется только при выполнении map.insert (), но не компилирует строку, пытающуюся использоватьитератор, возвращенный из map.insert ().

Ошибка компилятора: «ошибка: нет совпадения с оператором =»

Пожалуйста, смотрите строку с ошибками, предшествующую оператору возврата вфрагмент кода ниже.

Спасибо за любую помощь!

#include <map>
using namespace std;

class Keys {
public:
    Keys(int k1, int k2) :
        key1(k1), key2(k2) {
    }
    bool operator<(const Keys &right) const {
        return (key1 < right.key1 && key2 < right.key2);
    }
    int key1;
    int key2;
};

int main() {
    std::map<Keys, int> mymap;
    map<Keys,int>::iterator myitr;
    mymap.insert(std::pair<Keys, int>(Keys(3, 8), 5));
    myitr = mymap.insert(std::pair<Keys, int>(Keys(1, 2), 3));
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Вам нужно использовать соответствующую перегруженную функцию std :: map, которая возвращает итератор. Сейчас вы используете std :: map :: insert с одним параметром, и он возвращает std :: pair, но не итератор. Вы должны использовать это:

std::map<>::iterator std::map::insert( iterator _where, value_type val );

Итак, ваш код должен выглядеть так:

myitr = mymap.insert( std::begin( mymap ), std::make_pair( Keys(1, 2), 3) );
2 голосов
/ 20 февраля 2012

Вам необходимо использовать:

 pair<map<Keys,int>::iterator,bool> ret;
 ret = mymap.insert(std::pair<Keys, int>(Keys(1, 2), 3));

Обратите внимание на возвращаемые значения в std :: map :: insert () документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...