为什么 std::map::erase return 是 int 而不是 bool?
Why does std::map::erase return int rather than bool?
我想知道为什么 std::map::erase
有一个重载 return 是一个 int
代表被擦除的元素的数量;所以只要元素是唯一的,那么数字就是 1
或 0
。在这种情况下,为什么它不 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()
,无论它来自 map
或 multimap
,意思完全一样。
P.S。无需查找,您应该能够很好地猜测 std::set
和 std::multiset
的 erase()
方法 return.
所有的 c++ 有序关联容器都基于二叉搜索树,是相关的,这反映在它们相似的接口中。
我想知道为什么 std::map::erase
有一个重载 return 是一个 int
代表被擦除的元素的数量;所以只要元素是唯一的,那么数字就是 1
或 0
。在这种情况下,为什么它不 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()
,无论它来自 map
或 multimap
,意思完全一样。
P.S。无需查找,您应该能够很好地猜测 std::set
和 std::multiset
的 erase()
方法 return.
所有的 c++ 有序关联容器都基于二叉搜索树,是相关的,这反映在它们相似的接口中。