向量中对元素的数据类型是什么?

What is the data type of pair's element in vector?

本文关键字:数据类型 是什么 元素 向量      更新时间:2023-10-16

我需要临时声明 firstElement from 对在向量中

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;
            }
        }
    }
}

你的老师可能会期待各种各样的事情,包括

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的预期目的,以了解他们正在寻找的答案(如果有的话)。

访问一对的.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