Я пытаюсь использовать std :: unordered_map, как показано в the example here.std :: unordered_map с пользовательским типом значения, оператор []
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))
, но мне интересно, почему оригинал не работал.
Спасибо, поэтому добавление элементов с помощью 'operator []' не рекомендуется из-за дополнительной копии, правильно? – dimid
@Dimid: это удобная нотация, и по умолчанию сборка/копирование часто может быть устранена оптимизатором - очень редко нужно избегать «[]», но, как всегда, действительно действительно критичный по производительности код и видеть, где измерение ведет вас , –