地图查找功能困难

时间:2018-12-10 20:49:34

标签: c++ visual-c++

我很难弄清楚为什么不编译。这只是基本的类声明,省略了构造函数/析构函数和其他函数。在其他地方也可以正确定义消息。

#include <vector>
#include <map>
using namespace std;
class SmartCarrier {
        map<string, vector <Message *>> accounts_map;
        void SearchMessage() const;

    };

当我尝试用m_iter = accounts_map.find(account)分配m_iter时,出现错误,没有运算符“ =”与这些操作数匹配。我仔细检查以确保地图迭代器与实际地图的类型相同。我不确定什么不正确。

void SmartCarrier::SearchMessage() const {
        string account;
        map<string, vector<Message *>>::iterator m_iter;
        cout << "Enter an account: ";
        cin >> account;
        try {
            m_iter = accounts_map.find(account);
            if (m_iter != accounts_map.end) {
                  //code to display account information
            } else {
                throw 'e';
            }
        } catch (char e) {
            cout << "Error: Account not found\n";
        }
    }

1 个答案:

答案 0 :(得分:2)

SearchMessage()被声明为const,因此它的this参数指向一个const SmartCarrier对象,因此它的accounts_map成员也是{{1} }。在const上调用find()时,它将返回const map而不是const_iterator

此外,iterator必须改为accounts_map.end

此外,使用异常会浪费您可以(而且应该)摆脱的开销。

尝试一下:

accounts_map.end()

如果您使用的是C ++ 11或更高版本,请考虑显式使用void SmartCarrier::SearchMessage() const { string account; cout << "Enter an account: "; cin >> account; map<string, vector<Message *>>::const_iterator m_iter = accounts_map.find(account); if (m_iter != accounts_map.end()) { //code to display account information } else { cout << "Error: Account not found\n"; } } 而不是auto,这也可以解决以下错误:

const_iterator