C 列表一次由多个字段排序
C++ list sorted by multiple fields at once
我想知道是否有一个很好的方法可以使用两个或更多不同的标准同时排序的对象列表。因此,例如,如果我有一个课:
class Person {
Person(const char *name, int age);
float age;
char * name;
bool compareAge(person_t a) {return age < b.age;}
bool compareName(person_t a) {return strcmp(name,a.name) < 0;}
};
我有一百万个名字。我想知道是否有任何常见的课程可以有一个人列表,这样我就可以快速迭代并按字母顺序或按年龄在此列表上进行搜索。因此,例如,我希望能够在查找之间进行以下操作:
const std::multiset<Person, 2> mySet;
mySet.setSortCriteria(1, Person::compareName);
mySet.setSortCriteria(2, Person::compareAge);
populateAndSort(&mySet);
Person firstJohn = mySet.findByCriteria(1, Person("John",0));
Person firstTeen = mySet.findByCriteria(2, Person("",13));
我可以用两个单独的分类的指针进行此操作,但理想情况下,我只想维护一个列表(因此,如果我想在20个标准上进行查找,我就不需要维护20个列表...)。到目前为止,我还没有找到任何参考,以做到这一点的好方法,但是,目前我对C 有些新来,很有可能我错过了一些东西。
在我们贫穷的世界中没有魔法...如果您希望根据不同的订单可以访问相同的列表,则需要维护多个索引。这就是数据库工作的方式:您通常有一个主要键,该密钥应该是 native 访问模式,以及允许在索引字段上快速搜索和订购的替代索引。在容器世界中,主要键将是主要容器的本机顺序,替代索引将是替代地图,如果用于订购的字段,则键,该值将是主要容器的迭代器 - 至少对于更改中没有无效迭代器的容器,例如列表和地图。
您可以自己滚动。几乎没有警告,主要在修改主容器的修改上正确地维护所有索引。或您在评论中建议您只使用Boost。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 对许多字段的元素进行排序
- 基于不同字段的对象向量的排序功能
- 在对象向量中的对象字段排序
- C 列表一次由多个字段排序
- 按一个字段对自定义对象向量进行排序
- DBGrid按计算字段排序
- 根据特定字段对结构的矢量进行排序
- C# 与 C/C++:我是否需要手动对结构字段进行排序以获得最佳性能
- 具有位字段重新排序的结构
- 对两个不同字段进行排序并确定其唯一性的容器
- 如何用O(n)个时间和O(1)个空间对n个对象的群进行排序.每个对象有两个字段:int和string
- 如何根据结构体的字段之一对结构指针列表进行排序?
- 在一个数组中排序多个字段-c++