c++ - 使用对 vector 的 vector ?

标签 c++ c++11 vector stl

我一直在 Google 上搜索,但没有找到我需要的东西。我正在尝试创建一个 vector ,允许我添加 3 个(并且在我需要存储 4 个之后)变量、访问它们并对其进行排序。

我正在为 3 个变量实现如下 vector :

std::vector<std::pair<std::string, std::pair<int, double> > > chromosomes;

要添加信息(变量),我正在做:

chromosomes.emplace_back(dirp->d_name, std::make_pair(WSA, fault_percent));

如何访问每个参数并根据 WSA 和故障覆盖率对它们进行排序?就像在成对 vector 中一样,我可以使用成员 firstsecond 来做到这一点。

对于 4 个变量,它会是这样吗?

std::vector<std::pair<std::string, std::string>, std::pair<int, double> > > chromosomes;

chromosomes.emplace_back( std::make_pair(dirp->d_name, x), std::make_pair(WSA, fault_percent));`

最佳答案

按照此处的建议,我认为您应该使用 vector tuple<string, int, double> s 或 tuple<string, string, int, double>分别是.

有一个定义的 tuple::operator< 它对从左到右移动的每个组合类型使用小于运算符。如果每个元素的简单比较就足够了,那么您需要做的就是调用 sort :

sort(chromosomes.begin(), chromosomes.end());

如果tuple::operatior<没有提供足够的比较来满足您的需求 sort 提供采用比较 lambda 的重载。您的 lambda 需要执行以下操作:

  1. 接受 2 个对 tuple 的常量引用小号
  2. 返回true如果第一个tuple严格小于第二个 tuple
  3. 返回false如果第一个tuple大于或等于第二个 tuple

最后你的调用看起来像这样:

sort(chromosomes.begin(), chromosomes.end(), [](const auto& lhs, const auto& rhs) {
    // Your comparison between the two goes here
});

如果您不熟悉使用 tuple s 你需要使用模板化的 get tuple 不包含重复类型的情况下按索引或类型提取的方法.

关于c++ - 使用对 vector 的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002294/

相关文章:

c++ - TCP分片

c++ - VS 2013 Community - 创建代码片段

c++ - 重载本地 lambda 函数

在结构中声明 vector 时,C++ 不是类型错误

c++ - STL 中 std::vector 的 reserve() 实现

c++ - 多线程 galib247 遗传算法卡在局部最大值

C++ 对 std::bitset 的位进行操作

c++ - 如何在我的类(class)允许 range-for 循环?

c++ - 如何在未来的 C++ 11 中多次使用 get() 或如何获取 vector 值?

vector - 四元数的方向向量?