矢量&lt; pair <astruct *,int>&gt;不可能吗?</astruct *,int>

时间:2011-07-06 07:01:13

标签: c++ vector struct std-pair

所以我试着创建一个向量,其中元素是结构指针和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无效 错误:模板struct std :: pair

的模板参数列表中参数2的类型/值不匹配

这只是不可能的事吗? 什么可以替代解决方案呢? 您的意见将非常感谢!

6 个答案:

答案 0 :(得分:8)

创建新对时,请改用make_pair

这样可行:nodevector.push_back(make_pair(nod1, 3));

答案 1 :(得分:3)

nodevector.push_back(pair&lt; node *,int&gt;(nod1,3));

答案 2 :(得分:1)

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

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

相反,请尝试:

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

或者更好:

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

答案 3 :(得分:1)

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

您的代码正在尝试将“类型”推送到向量中。这就是编译器生气的原因:)。

你正在做类似

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

显然,你想要

v.push_back(i);

希望有所帮助。

答案 4 :(得分:0)

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

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

纠正它。

答案 5 :(得分:0)

尝试类似这样的事情,你会混淆你操作应计类的模板参数。

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

node * nod1 = new node(“HELLO”);    node * nod2 = new node(“WORLD”);    nodvector.push_back(对(nod1,4));    删除nod1;    删除nod2; }