Với một cái gì đó giống như đoạn mã sau:
std::map<Key, Value>::iterator i = amap.find(key);
if (i == amap.end())
amap.insert(std::make_pair(key, CreateFunction()));
else
UpdateFunction(&(i->second));
Nếu bạn muốn đo lường điều gì đó có thể cải thiện hiệu suất, bạn có thể muốn sử dụng .lower_bound()
để tìm mục nhập và sử dụng làm gợi ý để chèn vào trường hợp bạn cần chèn đối tượng mới.
std::map<Key, Value>::iterator i = amap.lower_bound(key);
if (i == amap.end() || i->first != key)
amap.insert(i, std::make_pair(key, CreateFunction()));
// Might need to check and decrement i.
// Only guaranteed to be amortized constant
// time if insertion is immediately after
// the hint position.
else
UpdateFunction(&(i->second));
Nguồn
2010-05-07 06:42:19
Điều này có thể mang lại mã trang nhã, nếu bạn muốn chèn đối tượng 'MyClass' mặc định và sau đó cập nhật nó. Nếu bạn cần chèn một đối tượng không mặc định, hoặc không cập nhật giá trị được chèn vào, giải pháp của Charles có lẽ tốt hơn. Cập nhật –
'(my_map [key])'? Điều đó cũng có nghĩa là bạn 'cập nhật' luôn (không rõ ràng từ câu hỏi). – UncleBens
Điều gì sẽ xảy ra nếu khóa không tồn tại? – Konrad