C++17
# C++17
Owner: -QVQ-
# map判存在再生成对象
对于map容器,存在一个使用场景,判断这个元素在map中是否存在,不存在插入一个对象并返回,如果存在则直接返回
template <class... Args>
pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);
//返回pair对象,second表示插入是否成功
//如果插入成功,first表示插入位置的迭代器,
//如果插入失败,first表示已存在相同key的元素的位置的迭代器
1
2
3
4
5
2
3
4
5
//使用场景,打开某个服务
void turnOn(int k, int v){
//尝试找到这个服务
auto [iter, inserted] = m_map.try_emplace(k);
//如果没有这个服务,则生成对象
if(inserted){
iter->second = std::make_unique<ChatDialog>();
}
//启用服务
iter->second->activate();
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
对于,判断这个元素在map中是否存在,不存在则插入对象,存在则修改对象
使用insert_or_assign
std::map<std::string, int> mapUsersAge{ { "Alex", 45 }, { "John", 25 } };
mapUsersAge.insert_or_assign("Tom", 26);
mapUsersAge.insert_or_assign("Alex", 27);
1
2
3
2
3
上次更新: 2025/02/21, 14:57:10