我一直在 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 中一样,我可以使用成员 first
和 second
来做到这一点。
对于 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 需要执行以下操作:
- 接受 2 个对
tuple
的常量引用小号 - 返回
true
如果第一个tuple
严格小于第二个tuple
- 返回
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/