在c ++中使用多个排序方法的STL容器

Ran*_*anH 5 c++ stl

我正在寻找一个容器,包含像Employee这样的对象(信息:名称,工资,电话......),这些对象可以按名称排序(a..z),其他时间按工资排序例.最好的方法是什么?我想到了地图,但后来我只定义了一把钥匙就会欣赏每一个想法(请不要太高级!)

---更新---

我实际上不需要总是维护2个STL容器,我通常会有1个(比如雇员按姓氏排序),根据要求,我不介意制作一个新的STL容器,并再次将所有元素推送到它,这次只按工资排序,所以我可以按该订单打印.是否可以使用名称排序创建map1,使用薪水排序创建map2?如果是这样的话会喜欢进一步的解释\例子来定义这两个地图.我的c ++知识很少(我得到的第一个任务)

sti*_*ijn 17

使用此版本的std :: sort

template <class RandomAccessIterator, class Compare>
void sort( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
Run Code Online (Sandbox Code Playgroud)

你可以对你想要的任何领域进行排序,提供你自己的比较器.例如

struct CompareSalary
{
  bool operator () ( const Employee& a, const Employee& b ) const
  {
    return a.salary < b.salary;
  }
}
Run Code Online (Sandbox Code Playgroud)

此外,由于std :: sort与提供随机访问迭代器的所有容器兼容,std :: vector也可以.


Yog*_*ora 8

如果您希望两个排序标准同时可用,您还可以查看Boost MultiIndex

Ps:但是既然你提到你是c ++的新手,我就不推荐使用Boost MultiIndex.很难理解它的语法


Phi*_*ter 6

提供功能std::sort:

bool byName(Employee left, Employee right) {
    return left.name < right.name;
}

std::vector<Employee> employees;
std::sort(employees.begin(), employees.end(), byName);
Run Code Online (Sandbox Code Playgroud)