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

Why does std::map::erase return int rather than bool?

我想知道为什么 std::map::erase 有一个重载 return 是一个 int 代表被擦除的元素的数量;所以只要元素是唯一的,那么数字就是 10。在这种情况下,为什么它不 return 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';

一旦您考虑 std::multimap::erase() returns.

,您的问题的答案就显而易见了

该容器的 erase() 方法可能 return 0,可能 return 1,或者可能 return 其他值。

具有跨容器一致的接口允许实现与任一容器同样有效的模板和算法,因为 return 值来自 erase(),无论它来自 mapmultimap,意思完全一样。

P.S。无需查找,您应该能够很好地猜测 std::setstd::multiseterase() 方法 return.

所有的 c++ 有序关联容器都基于二叉搜索树,是相关的,这反映在它们相似的接口中。