假设对向量的元素是
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
并根据第一个元素使向量唯一,但这不满足我的第二个条件。
我怀疑你正在尝试这样做(在这种情况下,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