C ++ - 是否可以通过单列对2D字符串向量进行排序?

时间:2016-11-22 13:27:38

标签: c++ vector

我有二维矢量

std::vector< std::vector< std::string > > stockVector;

看起来像:

{  
   { 1, "Title 1", 1, 2.20 },  
   { 2, "Title 2", 2, 3.30 },  
   // ...  
}

现在我需要同时按单列对其进行排序 - 我该怎么做?

2 个答案:

答案 0 :(得分:1)

假设您的数据看起来像这样:

std::vector< std::vector< std::string > > stockVector
{
   { "1", "Title 1", "1", "2.20" },
   { "3", "Title 3", "3", "4.30" },
   { "2", "Title 2", "2", "3.30" },
};

您可以将std::sort与自定义coparator一起使用:

const int columnId = 0;
std::sort(stockVector.begin(), stockVector.end(), [&columnId](const std::vector<std::string> &item1, const std::vector<std::string> &item2)
{
    return item1[columnId] < item2[columnId];
});

根据第一列对集合进行排序。

答案 1 :(得分:0)

如果使用std::set(如果不允许重复)或std::multiset,则可以将比较器作为构造函数参数传递。如果您这样做,您将保证容器始终排序。缺点是插入和删除成本增加。

using StringVec = std::vector<std::string>;
auto compare = [](const StringVec& item1, const StringVec& item2){ 
     return item1[0] < item2[0]; 
};
std::set< StringVec, decltype(compare)> stockVector(compare);