向量<对<结构*,int> >不可能吗?

vector< pair<aStruct*,int> > not possible?

本文关键字:lt gt 不可能 int 结构 向量      更新时间:2023-10-16

所以我试图制作一个向量,其中的元素是结构指针和int的对,我开始认为这可能是不可能的。。

假设我有以下结构:

struct node{
  string str;
  int size;
  node *child[3];
  node(string str1):str(str1){ size = 0;}
};

和一个矢量:

vector< pair<node*,int> > nodvector;

然后我尝试制作一个新的节点并将其放入向量中,但显然它不起作用:

int main(){
   node* nod1 = new node("HELLO");
   node* nod2 = new node("WORLD");
   nodevector.push_back(pair<nod1,3>);
   delete nod1;
   delete nod2;
}

编译器对我咆哮着说:nod1不能出现在常量表达式中错误:模板参数1无效错误:模板结构std::pair 的模板参数列表中参数2的类型/值不匹配

这只是不可能的事情吗?有什么替代方案可以解决这个问题?您的意见将不胜感激!

创建新对时,请改用make_pair

所以这是有效的:nodevector.push_back(make_pair(nod1, 3));

nodevector.push_back(对<node*,int>(nod1,3((;

问题是您使用nod13作为模板参数来配对:

nodevector.push_back(pair<nod1,3>);

相反,请尝试:

nodevector.push_back(pair<node, int>(nod1,3));

或者更好:

nodevector.push_back(make_pair(nod1,3));

以上所有答案都是正确的。

您的代码试图将一个"类型"推送到一个向量中。这就是编译器生气的原因:(。

你正在做类似的事情

int i = 10;
vector<int> v;
v.push_back(int);

显然,你想要

v.push_back(i);

希望能有所帮助。

创建一个成对的对象。你还没有创建它。

你认为"pair"是正确的语法吗?

更正。

尝试这样的操作——如果你混淆了要操作的应计类的模板参数。

vector< pair<node*,int> > nodvector;

node*nod1=新节点("HELLO"(;node*nod2=新节点("WORLD"(;nodvector.push_back(对(nod1,4((;删除nod1;删除nod2;}

从C++11开始,nodevector.push_back(pair<node*,int>(nod1, 3));甚至nodevector.push_back(make_pair(nod1, 3));的一个更干净的替代方案是使用emplace_backstd::vector<T>::emplace_back将采用与T的构造函数相同的参数,因此您可以直接输入参数:

nodevector.emplace_back(nod1, 3);

如果你仍然觉得有必要使用push_back,那么从C++17开始,类模板参数就可以推导出来,所以你不必使用make_pair:

nodevector.push_back(std::pair{nod1, 3});