Sorting a vector of objects in C++

后端 未结 8 1254
慢半拍i
慢半拍i 2021-01-28 13:26
struct Keyword
{
    std::string keyword;
    int numUses;
};  

bool sortingVector(const Keyword& key1, const Keyword& key2)
{
    return key1.numUses < key2         


        
相关标签:
8条回答
  • 2021-01-28 13:35

    Put std:: in front of your sort call. And #include <algorithm> at the top of the source file.

    0 讨论(0)
  • 2021-01-28 13:36

    are you using namespace std; ? if not you want std::sort()

    0 讨论(0)
  • 2021-01-28 13:40

    You probably want to call std::sort instead of plain sort and might have to include the appropriate header file (algorithmunless I'm mistaken).

    0 讨论(0)
  • 2021-01-28 13:41

    This is what a compilable example should look like:

    Because you did not provide the exact code that was generating the errors people have given a couple of different types of answer. As a result it is generally a good idea to generate a compilable example the displays the problem.

    #include <algorithm>
    #include <vector>
    #include <string>
    
    struct Keyword
    {
            std::string keyword;
                int numUses;
    };
    
    bool sortingVector(const Keyword& key1, const Keyword& key2)
    {
            return key1.numUses < key2.numUses;
    }
    
    int main()
    {
        std::vector<Keyword>    topKeywords;
    
        std::sort(topKeywords.begin(), topKeywords.end(), sortingVector);
    }
    

    Generally the compiler can do a better job of optimising (I am told) if you use a functor rather than a function pointer.

    struct SortingVectorFunctor
    {
        bool operator()(const Keyword& key1, const Keyword& key2) const
        {
            return key1.numUses < key2.numUses;
        }
    };
    
    0 讨论(0)
  • #include <vector>
    #include <algorithm>
    #include <string>
    
    struct Keyword
    {
        std::string keyword;
        int numUses;
    };  
    
    bool sortingVector(const Keyword& key1, const Keyword& key2)
    {
        return key1.numUses < key2.numUses;
    }
    
    int main()
    {
        std::vector<Keyword> topKeywords(100);
    
        // imagine topKeywords initialization here
    
        std::sort(topKeywords.begin(), topKeywords.end(), sortingVector);
    
        return 0;
    }
    

    Compiles fine on my machine (gcc version 4.4.3).

    0 讨论(0)
  • 2021-01-28 13:44

    Is sortingVector a non-static member of some class? The error message suggests that it is, in which case you will need to wrap it (using boost::bind, for example) into a binary operation that doesn't take a this parameter. You might want to make sortingVector a static member or a free function instead.

    0 讨论(0)
提交回复
热议问题