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

3

我在想为什么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';

2
这可能是为了与std::multimap保持一致,其erase方法可以一次删除多个元素。 - Fabio says Reinstate Monica
2个回答

5
考虑到 std::multimap::erase() 返回值,你的问题的答案就变得显而易见了。
该容器的 erase()方法可能返回0,可能返回1,也可能返回其他值。
具有在各种容器中保持一致的接口,可以实现使用模板和算法,这些模板和算法能够同样适用于任何容器,因为来自erase()的返回值,无论是来自map还是multimap,其含义完全相同。
附注:不查阅资料情况下,你应该能够猜到std::setstd::multiseterase()方法返回值是什么。

那么它们也返回 int,是吗? - Itachi Uchiwa
不,它们返回 size_type - user1095108
@user1095108:是的,我就是这个意思。无论如何,一个整数类型报告已删除元素的数量。 - Itachi Uchiwa

0

所有的C++有序关联容器都基于二叉搜索树,它们之间存在联系,并且这反映在它们相似的接口中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接