首页 > 解决方案 > 排序 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);
}

标签: c++

解决方案


问题在于您决定将什么添加到您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。


推荐阅读