我有二维矢量
std::vector< std::vector< std::string > > stockVector;
看起来像:
{
{ 1, "Title 1", 1, 2.20 },
{ 2, "Title 2", 2, 3.30 },
// ...
}
现在我需要同时按单列对其进行排序 - 我该怎么做?
答案 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);