对unordered_set进行Qsort或Sort

时间:2016-02-12 10:23:57

标签: c++ sorting qsort unordered-set

我有unordered_set个叫方程式。我没有排序或qsort是,这是我正在运行的代码行:

qsort(&equations, equations.size(), sizeof(string), strcmp);

我得到的错误是:

error: cannot convert 'std::unordered_set<std::basic_string<char> >' to 'void*' 
       for argument '1' to 'void qsort(void*, size_t, size_t, __compar_fn_t)'                   
qsort(equations, equations.size(), sizeof(string), strcmp); 

2 个答案:

答案 0 :(得分:2)

您需要将unordered_set复制到vector并对其进行排序。

还使用stl算法进行排序:

std::sort(v.begin(), v.end());
std::sort(v.begin(), v.end(), std::greater<int>());

答案 1 :(得分:0)

如果您可以使用std::set存储std::unordered_set的订购版本,则可以使用std::setstd::unordered_set::begin()初始化新的std::unordered_set::end()

#include <iostream>
#include <unordered_set>
#include <set>


int main() 
{
    std::unordered_set<int> unordered = { 9,1,8,2,7,3,6,4,5 };
    std::set<int> ordered(unordered.begin(), unordered.end());

    std::cout << "Before: ";
    for (auto iter = unordered.begin(); iter != unordered.end(); ++iter)
    {
        std::cout << *iter << ", ";
    }
    std::cout << std::endl;

    std::cout << "After:  ";
    for (auto iter = ordered.begin(); iter != ordered.end(); ++iter)
    {
        std::cout << *iter << ", ";
    }
    std::cout << std::endl;
}