按字母顺序c ++将对象插入向量

时间:2014-03-16 14:56:25

标签: c++ vector operator-overloading

我的目标是制作一个简单的函数,通过对象进行字母排序,将对象插入到向量中,以便稍后可以在向量中轻松搜索。

这是我的简化示例:

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class Names {
public:
    Names(void);
    ~Names(void);
    bool Insert(const string & namer);
private:

    struct Person {
        string name;
    };
    vector<Person>people;
};

Names::Names() {
};

Names::~Names() {
};

bool Names::Insert(const string& namer) {
    Person p;
    p.name = namer;
    people.insert(upper_bound(people.begin(), people.end(), p), p);
}

int main(int argc, char** argv) {
    Names b1;
    bool status;
    status = b1 . Insert("John Smith");
    status = b1 . Insert("Bat Man");
    status = b1 . Insert("A Aron");
    return 0;
}

它不起作用可能是因为upper_bound函数无法比较字符串。谁能帮助我如何正确使用插入功能插入到正确的位置?

感谢您的帮助。

编辑:

我的问题是我的解决方案不起作用,因为编译问题,我想找出原因。

2 个答案:

答案 0 :(得分:3)

您应该为类Person定义operator <。例如,它可以是类

的成员函数
struct Person {
    bool operator <( const pserson &rhs ) const { return ( name < rhs.name ); }
    string name;
};

答案 1 :(得分:0)

是的,您可以使用std::sort

采取三个论点,

Sort(your_vector.begin(),your_vector.end(),predicate)

您可以定义谓词函数,以按字母顺序对对象进行排序。