具有自定义值类型的std :: unordered_map,operator []

时间:2014-11-07 11:32:04

标签: c++ c++11 map stl unordered-map

我正在尝试使用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会提供errorno matching function for call to ‘CSVRecord::CSVRecord()’

我使用m.insert(pair<string, CSVRecord>("t",rec))代替,但我想知道为什么原版不起作用。

1 个答案:

答案 0 :(得分:6)

由于CSVRecord中缺少默认构造函数,您收到此错误。

operator[]如何运作?

operator[]搜索提供给它的键,如果元素已经存在于map中,则返回对该元素的引用。如果element不存在,那么它将使用默认构造对象添加键。在你的情况下,它无法找到合适的构造函数,因此发出错误。