C ++ не может ссылаться на ключ карты - PullRequest
0 голосов
/ 11 декабря 2018
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <string>

using namespace std;

int main() {
    int steps;
    map<string, string> countries;
    cin >> steps;
    for (int i = 0; i < steps; ++i) {
        string command;
        cin >> command;
        if(command == "CHANGE_CAPITAL") {
            for(auto& s : countries) {
                string& old_country = s.first;
                string& old_capital = s.second;
            }
        } 
    }
}

Привет!Когда я пытаюсь скомпилировать этот код, он выдает мне ошибку:

значение привязки типа 'basic_string <...>' для ссылки на спецификатор типа 'basic_string <...>' drop 'const'

для строки

string& old_country = s.first;

Почему это происходит?(это не выдает эту ошибку для следующей строки - где я использую s.second по ссылке).

Компилятор ISO C ++ 1y (-std = c ++ 1y).

Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018
const string& old_country = s.first;

Или даже лучше:

const auto& old_country = s.first;

Примечание: для удобства чтения добавьте const даже для авто.

Пара для вашей карты:

std::pair<const std::string, string>

, поскольку ключ не может быть изменен из-за ограничения дерева.

...