【发布时间】:2015-06-18 12:13:22
【问题描述】:
我试图从同一个 std::map 的每个其他元素中减去 std::map 的第一个元素。我找不到任何关于它的东西。是否可以?例如:
std::map<char,int> bar;
bar['a']=11; //should be deleted from other elements
bar['b']=22;
bar['c']=33;
bar['d']=44;
std::cout << "bar contains:\n";
for (std::map<char,int>::iterator it=bar.begin(); it!=bar.end(); ++it)
{
std::cout <<"key: " <<it->first << " Value=> " << it->second << '\n'; //can i delete here??
//i want to delete value of a from value of b and update the value of b
}
//the new map should be look like as follows
//bar['a']=11; //or may be 0
//bar['b']=11;
//bar['c']=22;
//bar['d']=33;
有什么想法可以用 c++ 中的 map 轻松完成吗? 谢谢。
【问题讨论】:
-
你在循环中尝试过
it->second = it->second - bar['a']吗? -
@tobi303,
bar.begin()->second会不会比假设第一个键是'a'更好? -
@JonathanWakely 据我了解,地图通常并不意味着元素的任何特定顺序,因此对我来说,通过它的键而不是它在地图中的位置来识别元素似乎更自然。无论如何,这取决于它应该如何使用。我可以想象
bar.begin()更有意义的用例以及'a'更有效的用例 -
@tobi303,不,
std::map是非常明确的,这是它的核心属性之一。排序非常具体,由第三个模板参数确定。另一方面,std::unordered_map并不暗示任何特定的顺序(线索就在名称中!) OP 非常清楚地说“减去第一个元素”,这就是bar.begin()所指向的那个。 -
@JonathanWakely 好的,感谢您的澄清。尽管如此,我不会称它为“更好”,而是“更一般”(请注意,他还明确指出第一个元素实际上是一个 'a'。我知道,它很容易分裂,所以没关系......)