3

I'm trying to understand the syntax used in STL for a class. Our teacher pointed us to this website (http://www.sgi.com/tech/stl/Map.html) where I copied the code below:

struct ltstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) < 0;
  }
};

int main()
{
  map<const char*, int, ltstr> months;

  months["january"] = 31;
  months["february"] = 28;
  months["march"] = 31;
  months["april"] = 30;
  months["may"] = 31;
  months["june"] = 30;
  months["july"] = 31;
  months["august"] = 31;
  months["september"] = 30;
  months["october"] = 31;
  months["november"] = 30;
  months["december"] = 31;

  cout << "june -> " << months["june"] << endl;
  map<const char*, int, ltstr>::iterator cur  = months.find("june");
  map<const char*, int, ltstr>::iterator prev = cur;
  map<const char*, int, ltstr>::iterator next = cur;    
  ++next;
  --prev;
  cout << "Previous (in alphabetical order) is " << (*prev).first << endl;
  cout << "Next (in alphabetical order) is " << (*next).first << endl;
}

I did not know you could declare methods in structs. How does that work?

I'm assuming that with it, when you declare the map named months, using the luster in the Compare field of a map alphabetizes the map. But still unsure about how it works with the struct syntax. Thanks.

3 Answers 3

15

In C++, a struct is really just a class whose default access specifier is public and which inherits publicly by default.

In other words,

struct ltstr
{
    // ...
};

is equivalent to

class ltstr
{
public:
    // ...
};

If you want to, you can make parts of your struct protected or private, too.

The reason that struct is still in C++, even though it's redundant, is backwards compatibility.

Sign up to request clarification or add additional context in comments.

2 Comments

@Alexandre: Good point -- I've incorporated this into the answer.
@Alexandre: Oooops... should have checked. This means the two code snippets are not just almost equivalent but exactly equivalent...
1

in C++ structs are classes with public members by default

3 Comments

You mean, with public members by default
And inherit as public by default.
-1 This wrong. The comments have it right, and I will remove my downvote if you edit your answer.
0

The struct does not add any functionality compared to a class except defaulting on public members. As such, none of that functionality is struct specific.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.