高效的使用stl::map和std::set

简介: 1、低效率的用法// 先查找是否存在,如果不存在,则插入if (map.find(X) == map::end()) // 需要find一次{    map.insert(x); // 需要find一次}// 下面这段代码是一个意思if (0 == map.
1、低效率的用法
// 先查找是否存在,如果不存在,则插入
if (map.find(X) == map::end()) // 需要find一次
{
    map.insert(x); // 需要find一次
}
// 下面这段代码是一个意思
if (0 == map.count(X) // 需要find一次
{
    map.insert(x); // 需要find一次
}

// 或者是先判断是否存在,如果不存在则插入,反之如果存在则修改
if (map.count(X) > 0) // 需要find一次
{
    map.erase(X); // 需要find一次
}
map.insert(x); // 需要find一次

// 对于erase存在同样低效的用法
if (map.count(X) > 0) // 需要find一次
{
    map.erase(X); // 需要find一次
}
else
{
    // 不存在时的处理
}

2、高效率的用法
// 解决办法,充分利用insert和erase的返回值,将find次数降为1
map::size_type num_erased = map.erase(X); // 需要find一次
if (0 == num_erased)
{
    // 不存在时的处理
}
else
{
    // 存在且删除后的处理
}

pair<:iterator bool> result_inserted;
result_inserted = map.insert(X);
if (result_inserted.second)
{
    // 不存在,插入成功后的处理
}
else
{
    // 已经存在,插入失败后的处理
    result_inserted.first->second = X; // 修改为新值 
}

相关文章
|
30天前
|
存储 算法 C++
【C++ map结构 】std::map 和 std::unordered_map 在使用上的差异
【C++ map结构 】std::map 和 std::unordered_map 在使用上的差异
22 0
|
2月前
|
C++
stl中set、map的用法
stl中set、map的用法
|
4月前
|
存储 自然语言处理 C++
C++ STL中 set和map介绍以及使用方法
C++ STL中 set和map介绍以及使用方法
61 1
|
10月前
|
存储 C++
[STL] 学习如何使用 set 和 map
[STL] 学习如何使用 set 和 map
48 0
|
10月前
|
自然语言处理 容器
C++STL——map与set介绍及使用
C++STL——map与set介绍及使用
|
10月前
|
C++
C++STL——map与set的模拟实现(上)
C++STL——map与set的模拟实现(上)
C++STL——map与set的模拟实现(下)
C++STL——map与set的模拟实现(下)
C++STL——map与set的模拟实现(中)
C++STL——map与set的模拟实现(中)
|
11月前
|
存储 数据处理 C++
STL之set,map
STL之set,map
|
11月前
|
存储 自然语言处理 C++
【STL】set、map的使用介绍
用来表示具有一一对应关系的一种数据结构,该结构中只包含两个成员变量key和value,key代表关键字,value表示关键字对应的值。比如:现在要建立一个英译汉的词典,那该词典中必然有英文单词和与其对应的中文含义,而且,英文单词与中文含义是一一对应的关系,