我需要从向量中的对中临时声明firstElement
vector<pair<char*, int> > rezVector; //is vector I'm using
auto tempPair = rezVector[0].first; //Is solution I got, but my teacher won't accept (I must know data type)
我已经尝试过
char tempPair;
char* tempPair;
char tempPair[20];
编辑 对于那些想知道我如何使用它的人:
sort(rezVector.begin(), rezVector.end(), compareFn);
char*& tempPair = rezVector[0].first; //Already with solution
for(int i=0; i<m; i++){
for(int j=i+1; j<m-1; j++){
if(rezVector[i].second == rezVector[j].second){
if(strcmp(rezVector[i].first, rezVector[j].first)>0){
tempPair = rezVector[i].first;
rezVector[i].first = rezVector[j].first;
rezVector[j].first = tempPair;
}
}
}
}
答案 0 :(得分:1)
您的老师可能会期望各种各样的东西,包括
char * temp = rezVector[0].first;
char *& temp = rezVector[0].first;
const char * temp = rezVector[0].first;
std::string temp = rezVector[0].first;
std::string_view temp = rezVector[0].first;
您将不得不问他们temp
的预期目的,以了解他们正在寻找哪个(如果有)答案。
答案 1 :(得分:0)
访问一对.first
实际上为您提供了对相应条目的引用,因此rezVector[0].first
的类型为char*&
。如果您确实想这样做,这使您可以更改rezVector[0].first
的内容。但是,您也可以将rezVector[0].first
的结果分配给类型为char*
的对象,以便获得引用值的副本。
因此,我认为选择正确的类型取决于您要对结果进行的处理。您是要更改对中的内容,还是只复制信息?
在以下示例中查看区别:
int main() {
char val1[] = "Hello";
char val2[] = "World";
char val3[] = "out there";
vector<pair<char*, int> > rezVector; //is vector I'm using
rezVector.push_back({val1,10});
cout << "initial: " << rezVector[0].first << std::endl;
char*& tempPairFirstReadWrite = rezVector[0].first;
tempPairFirstReadWrite = val2;
cout << "changed: " << rezVector[0].first << std::endl;
char* tempPairFirstReadOnly = rezVector[0].first;
tempPairFirstReadOnly = val3;
cout << "not changed again: " << rezVector[0].first << std::endl;
}
输出:
initial: Hello
changed: World
not changed again: World