簡體   English   中英

向量中對元素的數據類型是什么?

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

我需要從向量中的對中臨時聲明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;
            }
        }
    }
}

您的老師可能期望發生各種各樣的事情,包括

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM