C++ 有没有办法为std::pair声明运算符[]?

C++ 有没有办法为std::pair声明运算符[]?,c++,stl,C++,Stl,我想为std::pair声明运算符[]函数, 所以我写下了这些代码: template<typename T> T& std::pair<T, T>::operator[](int x) { if (x == 0) return p.first; return p.second; } 模板 T&std::对::运算符[](int x){ 如果(x==0) 返回p.first; 返回p.second; } 但我得到了编译错误,所以

我想为std::pair声明运算符[]函数, 所以我写下了这些代码:

template<typename T>
T& std::pair<T, T>::operator[](int x) {
    if (x == 0)
        return p.first;
    return p.second;
}
模板
T&std::对::运算符[](int x){
如果(x==0)
返回p.first;
返回p.second;
}

但我得到了编译错误,所以有没有办法为std::pair声明运算符[]函数?

运算符[]
不能作为非成员函数重载。由于不允许更改
std::pair
,因此无法使用
运算符[]通过索引访问pairs
first
second

如果您想要这种语法,为什么不直接使用数组?@0x499602D2:OP希望能够将一对
p的
p.first
p.second
元素引用为
p[0]
p[1]
。这不是不合理的,我想说。@TonyK:
pair
可以包含两种不同的类型,因此
操作符[]
通常没有任何明显的返回类型。如果类型相同,“为什么不使用数组”是一个好问题。(旁白:如果索引是编译时常量,
std::get
可能会做OP想要做的事情。)对这个问题的最好回答可能是“你到底想做什么?”em,我听说
pair
我们可以对pair使用
get()
,所以我认为可以声明
[]
for pair…直到看到std::get()的用法,我才知道哪里错了。