【发布时间】:2017-07-01 15:16:31
【问题描述】:
我有一些需要打印的数据,为了简单起见,可以说它是一个包含一些参数的人的容器(向量)。在我程序的不同部分,我需要打印所有按不同参数排序的部分。我的问题是
1.) 选择哪个容器? (我个人选择了矢量)。
2.) 哪种方法更好,每次都对整个向量进行排序,还是制作该向量的副本并将其保存排序更好?在我的解决方案中,我每次都对相同的向量进行排序,但由于速度的原因,对于大型向量来说,这可能不是正确的方法。
class Person
{
private:
std::string name;
std::string surname;
int age;
public:
Person(std::string name, std::string surname, int age) : name{ name }, surname{ surname }, age{ age } {};
void print() { std::cout << name << " " << surname << " " << age << std::endl; };
static bool sortName(Person const &A, Person const &B) { return A.name < B.name; };
static bool sortSurname(Person const &A, Person const &B) { return A.surname < B.surname; };
static bool sortAge(Person const &A, Person const &B) { return A.age < B.age; };
};
主要:
int main()
{
std::vector<Person> persons;
Person person1("John", "Smith", 30);
Person person2("Mark", "Cooper", 28);
Person person3("George", "Orwell", 19);
persons.push_back(person1);
persons.push_back(person2);
persons.push_back(person3);
std::sort(persons.begin(), persons.end(), Person::sortSurname);
for (int i = 0; i < persons.size(); ++i)
{
persons[i].print();
}
// do some other stuff here ... and then ...
std::sort(persons.begin(), persons.end(), Person::sortName);
for (int i = 0; i < persons.size(); ++i)
{
persons[i].print();
}
// do some other stuff here ... and then ...
std::sort(persons.begin(), persons.end(), Person::sortAge);
for (int i = 0; i < persons.size(); ++i)
{
persons[i].print();
}
return 0;
}
【问题讨论】:
-
您需要量化 "huge" 即小于 10,000 的向量排序,超过 10,000,000 您可能需要不同的方法。在 2 之间测量它。
-
矢量元素的大小也会影响我认为的选择...
标签: c++ sorting vector containers