gpt4 book ai didi

c++ - 加入两个对象容器,如果已经存在则添加元素

转载 作者:行者123 更新时间:2023-11-28 02:02:16 24 4
gpt4 key购买 nike

我有两个类型的对象容器:

struct Element
{
int A;
int B;

Element operator+=(const Element& rhs)
{
if(A != rhs.A)
throw std::runtime_error("Not like this");

B += rhs.B;
return *this;
}
};

inline Element operator+(Element lhs, const Element& rhs)
{
lhs += rhs;
return lhs;
}

现在我想加入这两个容器,如下所示:

  • 如果目标容器中没有其他元素具有相同的值A,则插入它
  • 如果目标容器中的另一个元素具有相同的值A,则将已经存在的元素和新元素相加

我想知道是否有一个优雅的解决方案(比仅仅有两个 vector 并在它们上循环更短)使用与 vector 不同的容器来解决这个问题。

最佳答案

使用 std::map<int, Element> 类型的 map 怎么样? ,其中关键是 A值?

std::map<int, Element>  m1;
std::map<int, Element> m2;

// add something in m1 e/o m2

for ( auto const & e : m2 )
{
m1[e.first] += e.second;
}

关键点是m1[e.first]返回对 m1 中元素的引用用 key e.first ,如果存在,或者创建它,如果不存在,则返回对新创建元素的引用。

重要的一点是要有一个默认的元素构造函数,它给 A新创建元素的值一个特殊值,其含义是“从添加 A 中吸收 Element 值”。

但可以是你可以赠送 A Element 中的值如果它仅用作 map 的键。

关于c++ - 加入两个对象容器,如果已经存在则添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975143/

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