C++ 配对'的数据类型是什么;向量中的s元素?

C++ 配对'的数据类型是什么;向量中的s元素?,c++,arrays,vector,char,std-pair,C++,Arrays,Vector,Char,Std Pair,我需要临时声明向量对中的第一个元素 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) 编辑 对于那些想知道我如何使用它的人: sort(rezVector.begin(), rezVe

我需要临时声明向量对中的第一个元素

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)
编辑 对于那些想知道我如何使用它的人:

 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;
            }
        }
    }
}
sort(rezVector.begin()、rezVector.end()、compareFn);
char*&tempPair=rezVector[0]。第一//已经有解决方案了吗

因为(inti=0;i你的老师可能会期待各种各样的事情,包括

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

访问配对的
。首先
实际上为您提供了对相应条目的引用,以便
rezVector[0].first
将具有类型
char*&
。这允许您更改
rezVector[0]的内容。如果您确实想这样做,请首先执行操作。但您也可以将
rezVector[0]的结果分配给类型为
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;

}

你能展示一下你是如何使用它们的,以及它们是如何不起作用的吗?
char*tempPair
应该是正确的。从技术上讲,你得到了一个
char*&
…你的意思是
vector::value\u type::first\u type
?@Slava我喜欢它。它很有趣,但它是“数据类型”:)我会告诉老师类型是
decltype(rezVector[0].首先)
,但对我来说,取笑老师总是比让他们开心更重要。你是对的,
char*&temp=rezVector[0]
是我要找的`我必须排序,所以我必须更改值,而不是复制。因此,正如我所看到的,我正在寻找相关条目的参考
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