我有兩個向量。第一個是一些類的對象的向量。第二個是元素指向第一個向量的對象的向量。向量的指向另一個向量的對象的指針 - 初始化和排序
我有兩個問題給你。第一個是:有更好或更優雅的方式來聲明和初始化指針向量?
第二個解釋更復雜一點。假設我想按降序查看第一個向量的元素。我所要做的就是讓運營商<
超載並對它們進行分類。那麼,現在假設我想按降序查看第一個向量的元素,而不改變其元素的順序,但只能在第二個向量的幫助下進行。換句話說,我想對第二個向量的元素進行排序,查看它們指向的內容,而不是像往常一樣查看它的元素,因爲它們是地址。我該怎麼辦?用其他類型的參數重載運算符<
?將另一個訂單功能傳遞給sort
?
我給你Minimal, Complete, and Verifiable example與g++ -std=c++11 -o example example.cpp
編譯。
example.ccp
#include <iostream>
#include <algorithm>
#include <vector>
class MyClass{
public:
int a;
int b;
MyClass(int a, int b) : a(a), b(b){};
bool operator<(const MyClass &obj)const{return (this->a + this->b) < (obj.a + obj.b);};
};
int main(int argc, char* argv[]){
std::vector<MyClass> vector1;
vector1.push_back({4, 5});
vector1.push_back({5, 6});
vector1.push_back({6, 7});
vector1.push_back({1, 2});
vector1.push_back({2, 3});
vector1.push_back({3, 4});
std::vector<MyClass*> vector2;
std::vector<MyClass>::iterator i;
for(i = vector1.begin(); i != vector1.end(); i++)
vector2.push_back(&(*i));
std::cout << "element pointed to by vector2 unsorted: " << std::endl;
for(int j = 0; j < vector2.size(); j++)
std::cout << vector2[j]->a << " " << vector2[j]->b << std::endl;
/* Insert here how I should sort vector2 */
// std::sort (vector2.begin(), vector2.end()); <-- Obviously this doesn't work
std::cout << "element pointed to by vector2 sorted: " << std::endl;
for(int j = 0; j < vector2.size(); j++)
std::cout << vector2[j]->a << " " << vector2[j]->b << std::endl;
return 0;
}
我不認爲你想這樣做。任何導致'vector1'重新分配的東西都會打破'vector2' – NathanOliver
第二個向量可能是* indices *的向量而不是指針。 –
我需要這樣做,因爲在我的項目中,vector1中有很多元素,它們也是相對較大的類型。 我認爲如果vector1被const值填充,你說的問題就解決了。 – giusva