c++ - 排序 an 在用户定义的函数中产生问题
问题描述
我正在尝试构建一个代码来检查给定的poset是否是格子。为此,我正在使用地图容器map<int,list<int> >
。如果未使用任何排序函数(用户定义的和内置的 STL 排序函数)对数组进行排序,则以下插入函数运行良好。谁能告诉我哪里出错了?
void insertion(map<int, list<int> > m, int* arr) {
for (int i = 0; i < 6; ++i) {
pair<int, list<int> > p;
list<int> l;
for (int j = i + 1; j < 6; ++j) {
if (arr[i] % arr[j] == 0)
l.push_back(arr[j]);
}
p = make_pair(arr[i], l);
m.insert(p);
}
for (map<int, list<int> >::iterator it = m.begin(); it != m.end(); ++it) {
cout << it->first << "->";
for (list<int>::iterator jt = it->second.begin(); jt != it->second.end(); ++jt)
cout << *jt << ",";
cout << endl;
}
}
int main() {
map<int, list<int> > m;
int arr[] = { 45, 9, 15, 3, 5, 1 };
cout << "Checking if lattice for divisibility relation on given set" << endl << "{";
for (int i = 0; i < 6; ++i)
cout << arr[i] << ",";
cout << "}\n";
sort(arr,arr+6);
insertion(m, arr);
}
解决方案
问题在于您决定将什么添加到您list
的 s.
for (int i = 0; i < 6; ++i) {
pair<int, list<int> > p;
list<int> l;
for (int j = i + 1; j < 6; ++j) {
if (arr[i] % arr[j] == 0)
l.push_back(arr[j]);
}
p = make_pair(arr[i], l);
m.insert(p);
}
arr
排序时,将arr[i]
始终小于或等于arr[j]
。这意味着除非它们相等(并且根据您的输入,它们不会相等),否则您if
永远不会是真的。例如,1%5
(执行的第一个检查)将为 1。
推荐阅读
- docker - gRPC-web 无法连接服务器(代理配置问题)
- c# - .NET Core 2.2 中 Socket BeginConnect 同步执行回调
- angular - Jest 测试运行无法识别“jest.spyOn”
- c# - 在 c# 中使用 Fluent FTP 从 FTP 服务器获取最后添加/复制的文件
- forms - Mapsui Xamarin Forms 中心地图
- javascript - 如何在 Vue.js 中正确添加条件事件绑定?
- opencv - 解释来自 OpenCV/OpenGL 应用程序的 UDP 视频流
- c# - 将值从一个窗口传递到另一个窗口上的列表框——C# WPF
- virtualbox - 使用带有 Windows 虚拟机 (VirtualBox) 的 VPN 是否足够匿名?
- javascript - Readline 在 55 行后停止。如何从节点js中的标准输入读取输入?