我的目标是制作一个简单的函数,通过对象进行字母排序,将对象插入到向量中,以便稍后可以在向量中轻松搜索。
这是我的简化示例:
#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函数无法比较字符串。谁能帮助我如何正确使用插入功能插入到正确的位置?
感谢您的帮助。
编辑:
我的问题是我的解决方案不起作用,因为编译问题,我想找出原因。
答案 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)
您可以定义谓词函数,以按字母顺序对对象进行排序。