如何仅首先排序std :: pair?

时间:2019-01-06 13:49:17

标签: c++ sorting

我有任务来制作以下方法:

  • 从字符串中获取数字
  • 每个数字等于其总和的子数字
  • 现在对这些总和进行排序
  • 显示排序的总和及其原始值

我做了那个功能:

obj/Debug/shader.o dep/engine/shader.d : src/engine/shader.cpp src/engine/shader.h \
src/engine/transform.h src/engine/camera.h src/engine/constants.h

此函数用于参数-void orderWeight(const std::string &strng) { std::vector<pair<int, int>> result; int r{}, rr{}, rrr{}; std::stringstream ss(strng); while(ss>>r){ rrr = r; while(r!=0){ rr += r%10; r /= 10; } result.push_back( make_pair(rr, rrr)); rr = 0; r = 0; } std::sort( result.begin(), result.end()); for( int i=0; i<result.size();i++){ cout<<result[i].first<<" "<<result[i].second<<endl; } } 返回:

56 65 74 100 99 68 86 180 90

但是我不想按第一个值排序,然后按第二个值排序,如您所见

1 100
9 90
9 180
11 56
11 65
11 74
14 68
14 86
18 99

如果两个数字相同,则不要按第二个值对它们进行排序,而要按字符串中的数字排序。

我该如何实现?

1 个答案:

答案 0 :(得分:2)

您可以通过为sort提供谓词来告诉它如何进行排序来实现这一目标。例如,一个简单的lambda:

std::sort( result.begin(), result.end(),
    [](const auto& lhs, const auto& rhs) {
        return lhs.first < rhs.first;
    });

以上内容将按第一个值对进行排序。

另请参阅:https://en.cppreference.com/w/cpp/algorithm/sort