【问题标题】:Is there an function for ordening and finding if the value already exists in c++?是否有用于排序和查找值是否已存在于 c++ 中的函数?
【发布时间】:2020-01-18 17:41:07
【问题描述】:

我在重新做一个旧项目时正在学习一点 c++,发现对用户制作的列表进行排序并使其远离在列表中选择相同的数字时遇到了一些困难,例如,我选择了 1 的范围到第n个,那么我要选择多少个这些数字,例如我选择1到25并从中选择15,我的代码将输出“12 3 5 11 15 5 4 4 8 15 6 6 2 13 2” .打印方式乱序并且一些数字重复,我想找到一种方法来按顺序打印它们而不重复。我有点迷路了!

我试过使用list::sort(),但没有任何结果。

编辑:完整代码:

int selectedNumbers, rounds, totalNumbers;
list<int> numbersList {totalNumbers};

int Calc(int totalNumbers, int selectedNumbers) 
{
    for (int j = 1; j <= totalNumbers; j++)
    {
        numbersList.push_back(j);
        while (j++ <= selectedNumbers)
        {
            int randomList = (rand() % selectedNumbers) + 1;
            cout << randomList << " ";
        }
    }
}

int main()
{
    cout << "How many numbers on the total? ";
    cin >> totalNumbers;
    cout << "Number of rounds: ";
    cin >> rounds;
    cout << "How many selected numbers?";
    cin >> selectedNumbers;

    for (int i = 1; i <= rounds; i++)
    {
        Calc(totalNumbers, selectedNumbers);
        cout << "\n";
    }

    return 0;
}

当前输出:

总共有多少个数字? 25

选择了多少个号码? 15

12 3 5 11 15 5 4 4 8 15 6 6 2 13 2

12 11 3 13 7 7 10 3 4 8 8 7 12 9 6

3 7 12 4 10 8 3 5 11 10 9 7 3 4 4

15 7 2 9 14 3 15 8 13 13 5 9 7 5 14

2 6 6 13 4 2 11 3 5 14 12 1 6 10 11

【问题讨论】:

  • 1) 请详细说明实际问题是什么。目前,即使经过多次阅读尝试,也不清楚第二个数字的含义是什么。由于您只是生成一些数字,因此请根据它打印这些数字并丢弃它们。 2) “我试过使用 list::sort() 但没有任何结果。” 显然,你得到了 some 结果。请详细说明为什么它不适合您的需求。
  • "我试过使用 list::sort() 但没有任何结果。"你得到了什么结果?
  • 实际代码有点长,当我把它粘贴到这里时,stackoverflow 抛出了格式。问题是我为数字的范围提供了一些输入,然后我想选择多少个,然后以排序方式打印它们而不重复它们
  • 最好的方法是列出一个包含所有数字1..25 的列表。然后随机打乱列表。选择顶部的15 项目,然后对其进行排序然后打印。
  • 你能把代码粘贴到stackoverflow吗?修复警告。如果你不能,就忽略它们。我们可以为您修复格式。没有代码很难理解你想要什么......

标签: c++ list sorting


【解决方案1】:

在您的代码中,我没有看到 sort() 函数。

list 的sort() 函数会按升序对元素进行排序。 list 的 unique() 函数将从列表中删除重复的元素。

下面是一个小例子。

#include <iostream>
#include <functional>
#include <list>

std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list)
{
    for (auto &i : list) {
        ostr << " " << i;
    }
    return ostr;
}

int main()
{
    std::list<int> list = {8,7,5,9,0,1,3,2,6,4,4,3};

    std::cout << "list before: " << list << "\n";
    list.sort();
    list.unique();
    std::cout << "list descending: " << list << "\n";
}

输出:

之前的列表:8 7 5 9 0 1 3 2 6 4 4 3
降序排列:0 1 2 3 4 5 6 7 8 9

【讨论】:

  • 您好,感谢您的意见!我已经删除了这个代码的排序,我会试试这个方法,看看它是否有效!
  • 它有点像我希望的那样工作,它仍然需要一些调整,但谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2012-02-07
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多