【转】vector中对象指针的排序

原文:http://blog.csdn.net/tanlijun37/article/details/1948493

vector中对象指针的排序,初步想法是
1: 把对象指针存到vector,重载bool operator(对象指针)
2:用sort来排序
例:
class A
{
public:
  bool operator(const A* temp)
  {
     return this->a < temp->a;
  }
  A(int a)
  {
    this->a = a;
  }
  int a;
};
vector<A*> vec;
vec.push_back(new A(10));
vec.push_back(new A(5));
vec.push_back(new A(4));
sort(vec.begin(), vec.end);

然而排序的结果却不对
后来上网查了一下,原来当我排序vector的时候,它比较的是指针,而不是对象,并且operator<重载符的参数应该用引用,而不是指针

解决办法:
1:声明一个全局的比较函数
例:
bool CompLess(const A* lhs, const A* rhs)
{
    return lhs->GetA() < rhs->GetA();
}
sort(vec.begin(), vec.end, CompLess);
2: 声明一个函数对象
class CompLess2
{
public:
    bool operator()(const A* lhs, const A* rhs)
    {
        return lhs->GetA() < rhs->GetA();
    }
};
sort(vec.begin(), vec.end, CompLess2);

时间: 2024-11-25 02:32:00

【转】vector中对象指针的排序的相关文章

C++中对象指针的使用

//定义结构 Box.h: #ifndef BOX_H #define BOX_H struct Box{ double length; double width; double height; double volume(); }; #endif //定义volume方法 t1.cpp: #include "box.h" double Box::volume(){ return length*width*height; } test.cpp: #include <iostrea

java 对list中对象按属性排序

实体对象类 --略 排序类----实现Comparator接口,重写compare方法 package com.tang.list; import java.util.Comparator; public class Mycompera implements Comparator<Student> { @Override    public int compare(Student o1, Student o2) {        if (o1.getSid() > o2.getSid()

JS中对象按属性排序

在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序. 例如返回的数据结构大概是这样: { result:[ {id:1,name:'中国银行'}, {id:3,name:'北京银行'}, {id:2,name:'河北银行'}, {id:10,name:'保定银行'}, {id:7,name:'涞水银行'} ] } 现在我们根据业务需要,要根据id的大小进行排序,按照id小的json到id大的json顺序重新排列数组的顺序 在js中添

Java中对象比较和排序实例

(1)对Element对象进行排序(根据体重和年龄)  (2)要想使用Arrays.sort支持排序的类必须实现Comparable接口    public class Elephant  implements  Comparable {  int weight ;  int   age    ;  float tusklength;  @Override  public int compareTo(Object o) {      Elephant  otherelephant =(Eleph

Arraylist中对象属性的排序

创建需要比较的实体属性 字符创比较 public class ZoneComparatorName implements Comparator<ZoneDTO> { @Override public int compare(ZoneDTO Z1, ZoneDTO Z2) { String name1 = Z1.getName(); String name2 = Z2.getName(); if (name1.compareTo(name2) > 0) { return 0; } else

CPP-STL:用vector保存对象时保存指针的优点, 以及reserve的使用(转)

代码1 [cpp] view plaincopy #include <vector> #include <stdio.h> class A { public: A() { printf("A()/n"); } ~A() { printf("~A()/n"); } A(const A& other) { printf("other/n"); } }; int main() { A a; A b(a); A c = a

转载:用vector保存对象时保存指针的优点, 以及reserve的使用

#include <vector> #include <stdio.h> class A { public: A() { printf("A()/n"); } ~A() { printf("~A()/n"); } A(const A& other) { printf("other/n"); } }; int main() { A a; A b(a); A c = a; return 0; } 执行结果1 A() o

把vector中的string对象导入到字符指针数组中

#include <iostream>#include <string>#include <vector>//#include <cctype>#include <cstring>//#include "Sales_item.h" using namespace std; //把vector中的string对象导入到字符指针数组中int main(){ vector<string> svec; string str

c++map按value排序--将map的pair对保存到vector中,然后写比较仿函数+sort完成排序过程。

map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学生姓名快速的查找到他的成绩. 但是,我们除了希望能够查询某个学生的成绩,或许还想看看整体的情况.我们想把所有同学和他