Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6649489
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T00:46:48+00:00 2026-05-26T00:46:48+00:00

I have a class for which I have defined comparison operator. Following is the

  • 0

I have a class for which I have defined comparison operator. Following is the code I wrote

#include <set>
#include <map>
#include <list>

    template <typename _TyV>
    class Element {
    public:
        Element(_TyV in) :  m_Label(in){}
        ~Element() {}
        bool operator < ( const Element & right) const {
            return m_Label < right.m_Label;
        }
    private:
        _TyV m_Label;
    protected:
    };
    typedef Element<int> ElementType;

    int main ( int argc, char **argv) { 
        std::set<ElementType> mySet;
        for ( int i = 0; i < 10; i++) {
            mySet.insert(ElementType(i));
        }
        std::map<ElementType*, std::list<ElementType*> > myMapList;
        return 0;
    }

I am confuse on how my std::map will work since the element I am interested in the std::map is pointer to the ElementType. What I actually want is to store actual data in std::set and use pointers to these element in the std::map

Major confusion is around the less than operator

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T00:46:49+00:00Added an answer on May 26, 2026 at 12:46 am

    Your map, std::map<ElementType*, std::list<ElementType*> > uses std::less on the key type as its comparator, as normal.

    std::less for pointer types is defined to produce a consistent ordering, but the ordering is based on the address only, not on anything that it might point to.

    So, your set sorts its contents according to the operator< in Element, but the map sorts them according to the actual pointer value of the key. That probably isn’t what you want: (1) it makes different Element<int> objects containing the same m_Label value act as different keys in the map, and (2) it means the map will be in a different order from the set. But std::map can take an extra template argument to provide a comparator, so you can change that.

    You could write a comparator that takes two pointers, and compares the objects they point to. This assumes of course that once you’ve used a pointer as a key in the map, you ensure that the object it points to sticks around (in the set, I assume, but if not then insert boilerplate lecture about shared_ptr here). Since Element<int> is cheap to copy, it would almost certainly be better to use ElementType as the key instead of ElementType*. But if int is just standing in for something you’ll use in future that’s expensive to copy, then change the map comparator.

    You might not care about the order of elements in the map. If you don’t, and if the only things you ever look up in the map are pointers to objects in the set, then using ElementType* as the map key without specifying a comparator should be fine.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a custom class for which I've defined a custom cast operator char()
In my application I have a class which has properties of user-defined types like
I have a class called MainGame, which is defined like this in my .h:
I have a class called Path for which there are defined about 10 methods,
I have some logic, which defines and uses some user-defined types, like these: class
I have a class UserProfile defined which takes the default user as a foreign
First, I have a dbcontext factory which is defined public class DatabaseFactory : Disposable,
From wikipedia: // A class template to express an equality comparison interface. template<typename T>
I have a class which has a well-defined responsibility - to Enrich an object
I have a class which has the following constructor public DelayCompositeDesigner(DelayComposite CompositeObject) { InitializeComponent();

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.