我正在尝试使用std::unordered_map,如the example here所示。

class CSVRecord {
public:
    CSVRecord(string csvLine) : _fields(vector<string>()) {...}
    vector<string> _fields;
};

int main(int argc, char* argv[]) {
    unordered_map<string, CSVRecord> m;
    CSVRecord rec = CSVRecord("test");
    m["t"] = rec;
    return 0;
}

但是,m["t"] = rec给出了error:no matching function for call to ‘CSVRecord::CSVRecord()’

我改用了m.insert(pair<string, CSVRecord>("t",rec)),但是我不知道为什么原始的不起作用。

最佳答案

由于缺少CSVRecord中的默认构造函数,因此出现此错误。
operator[]如何工作?
operator[]搜索提供给它的键,如果map中已经有元素,它将返回对该元素的引用。如果元素不存在,那么它将添加具有默认构造对象的键。在您的情况下,它找不到合适的构造函数,因此发出了错误。

关于c++ - 具有自定义值类型的std::unordered_map,运算符[],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26800298/

10-11 16:28