C++ 对向量整数的向量进行排序
我有一个包含对的向量向量,我想根据对之间的分割结果作为决定排序因子对它们进行排序C++ 对向量整数的向量进行排序,c++,sorting,vector,C++,Sorting,Vector,我有一个包含对的向量向量,我想根据对之间的分割结果作为决定排序因子对它们进行排序 vector<vector<int>> = {{1,2},{1,3},{2,5}}; 有办法吗?std::sort接受自定义谓词。因此,您可以在此处定义一个lambda来进行比较: std::vector<std::vector<int>> myvec = {{1,2},{1,3},{2,5}}; std::sort(myvec.begin(), myvec.end
vector<vector<int>> = {{1,2},{1,3},{2,5}};
有办法吗?
std::sort
接受自定义谓词。因此,您可以在此处定义一个lambda来进行比较:
std::vector<std::vector<int>> myvec = {{1,2},{1,3},{2,5}};
std::sort(myvec.begin(), myvec.end(),
[](const auto& v1, const auto& v2) { return (v1.at(0)*v2.at(1)) < v2.at(0)*v1.at(1); }
);
std::vector myvec={{1,2},{1,3},{2,5};
排序(myvec.begin(),myvec.end(),
[](const auto&v1,const auto&v2){return(v1.at(0)*v2.at(1))
您必须确保所有内部向量至少包含两个元素。可能一个
std::pair
更适合这里?这里有一个简单的方法来解决这个问题,而且它永远不会失败。只要拿出一张白纸。用简单明了的英语写下简短的句子,这是一个循序渐进的过程。完成后。我们不会在Stackoverflow上为其他人编写代码。我们总是把这样的问题交给你们的橡皮鸭。在你的橡皮鸭同意你提出的行动计划后,只需把你写下来的东西直接翻译成C++。任务完成了<代码>标准::排序(v.begin(),v.end())代码>不需要分割<代码>(v1.at(0)/v1.at(1))(v1.at(0)*v2.at(1))
。这些是整数,OP的问题不需要整数除法。@Stef正确,我编辑了我的答案。我喜欢这个解决方案,但是我得到了一个超出范围的错误。@GeorgeKhanachat你确定你的向量只包含正好有两个元素的向量吗?@GeorgeKhanachat,使用向量
,而不是向量
,而且你不会得到距离误差。
std::vector<std::vector<int>> myvec = {{1,2},{1,3},{2,5}};
std::sort(myvec.begin(), myvec.end(),
[](const auto& v1, const auto& v2) { return (v1.at(0)*v2.at(1)) < v2.at(0)*v1.at(1); }
);