【发布时间】:2013-03-04 19:19:13
【问题描述】:
假设我有一个 people 结构:
struct Person {
char name[100];
char surname[100];
unsigned int age;
};
我想找出最快的方法来搜索并查找向量中是否已经存在具有相同值(相同名称、相同姓氏、相同年龄)的另一个结构。
请记住,我在一个向量中有数百万个。
谢谢
【问题讨论】:
-
尝试将
vector的项目放到set,并使用set的快速查找。 -
你能举个例子吗?谢谢。
-
如何对向量进行排序?我的意思是,如果我需要所有内容都匹配,我可以根据姓名、姓氏或年龄对其进行排序吗?
-
如果它已经通过综合比较器或
operator <()对上述所有字段进行了排序,则可以进行简单的二进制搜索。如果不是,则所需的最短时间将是 O(N) 并且需要线性扫描,尽管您可以在发现存在的那一刻提前退出;具有讽刺意味的是,在您的向量中确定它是 not 将花费最长的时间)。如果这将是一个频繁的操作,我会建议一个全面的operator <()和一个std::set<>而不是vector<>。构建时间为 O(NlogN),但搜索时间减少到 O(logN)。 -
只要你放弃可怕的 O(N^2) 或更糟的算法,一百万个这么小的东西几乎没有。