向量<对<结构*,int> >不可能吗?
vector< pair<aStruct*,int> > not possible?
所以我试图制作一个向量,其中的元素是结构指针和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((;
问题是您使用nod1
和3
作为模板参数来配对:
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_back
。std::vector<T>::emplace_back
将采用与T
的构造函数相同的参数,因此您可以直接输入参数:
nodevector.emplace_back(nod1, 3);
如果你仍然觉得有必要使用push_back
,那么从C++17开始,类模板参数就可以推导出来,所以你不必使用make_pair
:
nodevector.push_back(std::pair{nod1, 3});
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中