gpt4 book ai didi

c++ - 如何从一个到另一个减去 std::map 元素并在 C++ 中更新它

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:40 24 4
gpt4 key购买 nike

我试图从同一个 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 轻松完成吗?谢谢。

最佳答案

C++11 解决方案

你可以使用 std::for_each为此

std::for_each(std::next(bar.begin()), bar.end(), [&bar](std::pair<const char, int>& x){ x.second -= bar.begin()->second; });

例如

#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>

int main()
{
std::map<char,int> bar;
bar['a']=11;
bar['b']=22;
bar['c']=33;
bar['d']=44;

std::for_each(std::next(bar.begin()), bar.end(), [&bar](std::pair<const char, int>& x){ x.second -= bar.begin()->second; });

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';
}
}

输出(working demo)

bar contains:
key: a Value=> 11
key: b Value=> 11
key: c Value=> 22
key: d Value=> 33

如果你想从自身中减去第一个元素,只需删除 std::next调用并捕获要减去的值,因为您要修改第一个 map 条目。

auto const sub = bar.begin()->second;
std::for_each(bar.begin(), bar.end(), [&sub](std::pair<const char, int>& x){ x.second -= sub; });

C++03解决方案

从第一个元素本身除外中减去第一个元素

int value = bar.begin()->second;
std::map<char, int>::iterator it = bar.begin();
std::advance(it, 1);
for (; it != bar.end(); ++it)
{
it->second -= value;
}

包含第一个元素

int value = bar.begin()->second;
for (std::map<char, int>::iterator it = bar.begin(); it != bar.end(); ++it)
{
it->second -= value;
}

关于c++ - 如何从一个到另一个减去 std::map 元素并在 C++ 中更新它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30915041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com