删除向量中共享相同第一个元素的对,但保留包含最大第二个元素的对

问题描述 投票:0回答:1

假设对向量的元素是

1, 0
2, 0
1, 2
2, 4
4, 0
5, 0

输出应该是

1, 2
2, 4
4, 0
5, 0

在上面的示例中,对 {1, 0} 和 {1, 2} 替换为 对 {1, 2},因为它们共享相同的第一个元素 (1),并且最大的第二个元素是 (2)。

我尝试使用

set
并根据第一个元素使向量唯一,但这不满足我的第二个条件。

c++ vector unique std-pair
1个回答
0
投票

我怀疑你正在尝试这样做(在这种情况下,nisssh 现已删除的答案应该得到事先识别)。高效的?好吧,取决于您最终实际上想要做什么。从一开始就使用地图会更好。

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main()
{
   vector<pair<int,int>> input = { { 1, 0 }, { 2, 0 }, { 1, 2 }, { 2, 4 }, { 4, 0 }, { 5, 0 } };
// vector<pair<int,int>> input = { { 1, 2 }, { 2, 4 }, { 4, 0 }, { 5, 0 }, { 1, 0 }, { 2, 0 } };        // check both

   map<int,int> M;
   for ( auto [ p, q ] : input )
   {
      if ( M.count( p ) ) M[p] = max( M[p], q );
      else                M[p] = q;
   }

   vector<pair<int,int>> output( M.begin(), M.end() );
   for ( auto [ p, q ] : output ) cout << p << " " << q << '\n';
}

输出:

1 2
2 4
4 0
5 0
© www.soinside.com 2019 - 2024. All rights reserved.