删除所有具有零值的映射键
Delete all the map keys with zero values
有这张地图,其键属于 {0, 1, 2, 3}。
我需要擦除所有值为 0 的键。
这段代码是好的做法吗?
map<int, int> nums = {{0, 1}, {1, 3}, {2, 0}, {3, 1}};
for(int i = 0; i < 4; i++)
if (nums.count(i) > 0 && nums[i] == 0)
nums.erase(i);
这似乎可行,但在同一个循环中遍历地图并擦除密钥让我感到不舒服。
如果这段代码不是很好的方式,那么擦除映射中所有值为零的键的最佳方法是什么?
这是一个非常接近您的任务的好例子http://en.cppreference.com/w/cpp/container/map/erase
我给你更新了。
#include <map>
#include <iostream>
int main()
{
std::map<int, int> c = {{1, 1}, {2, 0}, {3, 3},
{4, 0}, {5, 5}, {6, 0}};
// erase all key-value pairs with zero values from c
for(auto it = c.begin(); it != c.end(); )
if(it->second == 0)
it = c.erase(it);
else
++it;
for(auto& p : c)
std::cout << p.second << ' ';
}
输出:
1 3 5
我建议您经常访问 http://en.cppreference.com。
有这张地图,其键属于 {0, 1, 2, 3}。
我需要擦除所有值为 0 的键。
这段代码是好的做法吗?
map<int, int> nums = {{0, 1}, {1, 3}, {2, 0}, {3, 1}};
for(int i = 0; i < 4; i++)
if (nums.count(i) > 0 && nums[i] == 0)
nums.erase(i);
这似乎可行,但在同一个循环中遍历地图并擦除密钥让我感到不舒服。
如果这段代码不是很好的方式,那么擦除映射中所有值为零的键的最佳方法是什么?
这是一个非常接近您的任务的好例子http://en.cppreference.com/w/cpp/container/map/erase 我给你更新了。
#include <map>
#include <iostream>
int main()
{
std::map<int, int> c = {{1, 1}, {2, 0}, {3, 3},
{4, 0}, {5, 5}, {6, 0}};
// erase all key-value pairs with zero values from c
for(auto it = c.begin(); it != c.end(); )
if(it->second == 0)
it = c.erase(it);
else
++it;
for(auto& p : c)
std::cout << p.second << ' ';
}
输出:
1 3 5
我建议您经常访问 http://en.cppreference.com。