为什么 std::map::erase 返回 int 而不是 bool?

Ita*_*iwa 3 c++ stdmap c++11

我想知道为什么std::map::erase有一个重载返回一个int代表被删除元素的数量;因此,只要元素是唯一的,那么数字就是10。在这种情况下,为什么它不返回bool而不是返回int

     std::map<std::string, std::size_t> containers{
    {"map", 1}, {"set", 10}, {"map", 5}, {"vector", 4}, {"array", 7}
};

for(auto const& p : containers)
    std::cout << p.first << " " << p.second << '\n';

std::cout << containers.erase("map") << '\n'; // 1
std::cout << containers.erase("map") << '\n'; // 0

for(auto const& p : containers)
    std::cout << p.first << " " << p.second << '\n';
Run Code Online (Sandbox Code Playgroud)

Sam*_*hik 5

一旦你考虑到什么回报,你的问题的答案就会变得显而易见std::multimap::erase()

该容器的erase()方法可能返回 0,也可能返回 1,或者可能返回某个其他值。

拥有跨容器一致的接口可以实现与任一容器同样有效的模板和算法,因为 的返回值erase(),无论是来自 amap还是 a multimap,都意味着完全相同的事情。

PS 无需查找,您应该能够很好地猜测std::set's 和std::multiset'serase()方法返回什么。