使用STL算法合并2个向量

时间:2017-06-03 14:59:41

标签: c++ c++11 stl

我有2个向量,即@Controller public class LoginController { @RequestMapping(value = "/", method = RequestMethod.GET) public String showLoginPage(Model model) { model.addAttribute("loginBean", new LoginBean()); return "login"; } @RequestMapping(value = "/showProfile", method = RequestMethod.POST) public ModelAndView redirectToprofile(@ModelAttribute("loginBean") LoginBean loginBean) { StaffServiceImpl staffServiceImpl = new StaffServiceImpl(); Staff staff = staffServiceImpl.authenticateStaff(loginBean); if (null != staff) { return new ModelAndView("redirect:/profilePage","staffData",staff); } return new ModelAndView("profileNotFound"); } @RequestMapping(value = "/profilePage", method = RequestMethod.GET) public String showProfilePage() { return "profilePage"; } 的{​​{1}}和deals_all,其中deals_new是一个类

FXDeal

两个向量都按主键字段FxDeal排序。

如何将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_newdeal_id_

我使用的是c ++ 11。

2 个答案:

答案 0 :(得分:3)

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

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作为第一个范围传递,因为这将是在重复ID的情况下复制的范围。

答案 1 :(得分:2)

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

min(valid_trips, key=len)