在C++中,可以使用std::sort
算法对tuple<string, float>
的向量进行排序。首先,我们需要定义一个比较函数,该函数将首先按照数值进行排序,然后按照字典顺序进行排序。
#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>
bool compare(const std::tuple<std::string, float>& a, const std::tuple<std::string, float>& b) {
// 按照数值进行排序
if (std::get<1>(a) < std::get<1>(b)) {
return true;
}
else if (std::get<1>(a) > std::get<1>(b)) {
return false;
}
// 数值相等时,按照字典顺序进行排序
return std::get<0>(a) < std::get<0>(b);
}
int main() {
std::vector<std::tuple<std::string, float>> vec = { {"apple", 3.5}, {"banana", 2.0}, {"orange", 3.5}, {"grape", 2.5} };
std::sort(vec.begin(), vec.end(), compare);
for (const auto& item : vec) {
std::cout << std::get<0>(item) << " " << std::get<1>(item) << std::endl;
}
return 0;
}
上述代码中,我们定义了一个名为compare
的比较函数,该函数接受两个tuple<string, float>
类型的参数a
和b
。首先,我们通过std::get<1>(a)
和std::get<1>(b)
分别获取到两个tuple
中的数值部分,然后进行比较。如果a
的数值小于b
的数值,我们返回true
,表示a
应该排在b
之前;如果a
的数值大于b
的数值,我们返回false
,表示a
应该排在b
之后。如果两个数值相等,我们再通过std::get<0>(a)
和std::get<0>(b)
获取到两个tuple
中的字符串部分,然后进行字典顺序的比较,返回比较结果。
在main
函数中,我们创建了一个vector
,其中包含了四个tuple<string, float>
元素。然后,我们使用std::sort
算法对该向量进行排序,传入我们定义的比较函数compare
作为排序的依据。最后,我们遍历排序后的向量,并输出每个元素的字符串和数值部分。
这样,我们就可以按照数值和字典顺序对tuple<string, float>
的向量进行排序了。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云