C++对数据类型问题
C++ pair data type issue
我正在编写一个朋友推荐算法,在一部分我必须使用C++中std::pair
数据类型存储 350 个随机友谊。我基本上使用邻接列表(实现为向量的向量)。我创建了一个存储数据类型的向量 pair<int,int>
.我从邻接列表中选择一个随机值并随机选择它的朋友之一,但是,即使我很确定我将数据类型推送为对,但我无法迭代它。
可能的原因是什么?
int FRIENDS_AND_UNFRIENDS_TO_STORE=350,randomNode=rand()%adjacencyList.size(),randomFriend;
vector< pair<int,int> >listForPR;
listForPR.resize(FRIENDS_AND_UNFRIENDS_TO_STORE*2);
for(int i=0;i<FRIENDS_AND_UNFRIENDS_TO_STORE;i++) {
while(adjacencyList[randomNode].size()<1)
randomNode=rand()%adjacencyList.size();
randomFriend=rand()%adjacencyList[randomNode].size();
listForPR.push_back(make_pair(randomNode,adjacencyList[randomNode][randomFriend]));
}
for(int i=0;i<350;i++)
cout<<"Node #"<<listForPR[i].first<<" & It's Friend: "<<listForPR[i].second<<endl;
添加了这个并神秘地解决了问题;
for(int i=0;i<FRIENDS_AND_UNFRIENDS_TO_STORE;i++) {
while(adjacencyList[randomNode].size()<1)
randomNode=rand()%adjacencyList.size();
randomFriend=rand()%adjacencyList[randomNode].size();
pair<int,int> temp=make_pair(randomNode,adjacencyList[randomNode][randomFriend]);//added
listForPR.push_back(temp);
}
您的向量包含您在循环期间推送的 350/2 = 175 个元素,但在迭代时您将经历 350 个元素。
您不应该混合调整大小和push_back。
第一次调整大小将填充 listForPR 包含 350 个清零项。然后push_back将项添加到矢量的末尾。
删除调整大小语句应该可以解决问题。更好的解决方案是使用保留(它只是在向量中准备缓冲区以进行插入)。
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- printf 数据类型说明符复杂问题
- 将数据类型从C#封送至C++的类型转换问题
- 在C 中使用字符串数据类型的问题
- 模板函数实例化 自定义数据类型的问题
- C++对数据类型问题
- B-树搜索引用子数据类型问题
- 复杂数据类型的模板实例化问题
- 如何正确使用模板?我在使用模板时遇到数据类型问题<>
- 尝试用c++类创建泛型数据类型的问题
- 与我定义的类的成员有关的c++向量数据类型编译器错误问题
- 有数据类型问题的c++阶乘函数