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); }
);