首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用STL算法合并2个向量

用STL算法合并2个向量
EN

Stack Overflow用户
提问于 2017-06-03 14:59:41
回答 2查看 111关注 0票数 0

我有两个向量,即deals_alldeals_new of FXDeal,其中FxDeal是一个类

代码语言:javascript
运行
复制
struct FxDeal
{
    int deal_id_; // primary key
    string ccy_pair_;
    double amount_;
}

两个向量都按照主键字段deal_id_进行排序。

我如何将deals_new合并到deals_all中以便

  • deals_new中的新交易被复制或附加到deals_all中,并且
  • deals_all中也出现在deal_new中的交易(按主键deal_id_),将更新字段ccy_pair_amount_

我在用c++11。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-03 15:15:31

您可以使用std::set_union。(这假设向量是使用名为compare_by_id的比较函数排序的,它执行名称所暗示的操作)。

代码语言:javascript
运行
复制
std::vector<FxDeal> merged_deals;
std::set_union(deals_new.begin(), deals_new.end(),
    deals_all.begin(), deals_all.end(),
    std::back_inserter(merged_deals),
    compare_by_id);

deals_all = std::move(merged_deals);

请确保将deals_new作为第一个范围传递,因为在重复ids的情况下,这将是复制的范围。

票数 3
EN

Stack Overflow用户

发布于 2017-06-03 15:08:36

我将尝试以下(伪代码):

代码语言:javascript
运行
复制
std::set<FxDeal> deal_set{deals_all.cbegin(), deals_all.cend()};

for (auto const& d : deals_new) {
  auto it = deal_set.find(d);
  if (it != deal_set.end()) {
     FxDeal x = *it;
     // update x with d.ccy_pair_ and d.amount_;
     // this allows adding amounts, for e.g. x.amount_ += d.amount_
     deal_set.erase(it);
     deal_set.insert(x);         
  }
  else {
    deal_set.insert(d);
  }
}

deals_all.assign(deal_set.cbegin(), deal_set.cend());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44345259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档