按结构内的变量对结构向量进行排序
Sort vector of structs by a variable within the struct?
>我有一个数据结构,例如:
struct Data
{
string firstname;
string lastname:
string age;
}
我已经将每个结构都放在一个向量(VectorOfData)中。是否可以遍历此向量并按年龄降序对向量中的每个结构进行排序?使用类似以下内容:
for(std::vector<Data>::const_iterator it = VectorOfData.begin(); it != VectorOfData.end(); ++it)
{
//sorting by age here?
}
我假设它不会那么简单,因为它迭代器一次只访问向量中的一个结构?
我意识到我甚至可以在将结构放入向量之前进行排序,但我的问题并不那么简单。这只是我能解释的最简单的方法。任何建议将不胜感激,谢谢
您可以将 std::sort 与自定义比较函数一起使用:
bool is_younger(const Data& x, const Data& y) { return x.age < y.age; }
排序:
std::sort(VectorOfData.begin(), VectorOfData.end(), is_younger);
或者,您可以定义一个自定义函子(注意:这实际上是首选,因为它增加了内联的可能性,读取:更快的排序)
struct is_younger_functor
{
bool operator()(const Data& x, const Data& y) const
{
return x.age < y.age;
}
};
排序:
std::sort(VectorOfData.begin(), VectorOfData.end(), is_younger_functor());
如果要为 Data
定义严格的排序关系,应考虑将其转换为常规类型(定义运算符 <, <=, ==, !=,>,>=)。
在这种情况下,您将不需要定义此is_younger函子,并且可以使用迭代器调用 std::sort。
编辑:严格来说,您只需要为 std::sort 定义运算符<,但如果您定义它,最好定义其余运算符。
您可以使用 std::sort。它在算法中定义为
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
其中 comp 是类型的比较器函数
bool cmp(const Type1 &a, const Type2 &b);
您可以根据需要定义。
如果您已C++11,则可以传入lambda函数。
std::sort(VectorOfData.begin(), VectorOfData.end(), [](const Data &a, const Data &b)
{
return (a.age.length() < b.age.length());
});
如果你不能使用 C++11,你可以在某处声明和定义比较器函数,然后你甚至不需要传递它进行排序。这也适用于 C++11。
bool operator<(const Data& a, const Data& b)
{
return (a.age.length() < b.age.length());
}
std::sort(VectorOfData.begin(), VectorOfData.end()); // sort's variant without comparator
我推荐第二种声明operator<
的方法,因为为类定义比较器函数更有意义;lambda 方式更像是一种写和扔掉类型的方便函数。
相关文章:
- 将结构向量排序为子组
- 带有枚举方向/类型的气泡排序结构数组
- C++对结构向量进行排序
- 在C++中对结构向量进行排序时出现问题
- 按字母顺序对结构内数组变量中的名称进行排序
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 使用选择排序对数组数据结构进行排序,但它不起作用
- 对结构向量进行两次排序
- C++使用QuickSort对数组结构进行排序
- 如何选择排序一些结构
- 对结构int成员进行排序
- 在排序链表中插入结构并将其写入二进制文件
- 对坐标结构的向量进行排序
- C++ 中优先级队列的结构排序条件
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- 按字母顺序对结构数组进行排序
- C++结构排序性能
- 自定义结构排序不起作用
- std::向量使结构排序变慢?C++
- 数据结构-排序队列链表c++