সি প্লাস প্লাসে আমরা বিভিন্ন কাজে ম্যাপ ব্যবহার করে থাকি। আমরা জানি ম্যাপ কি (Key) অনুসারে সর্ট করা থাকে। কিন্তু আমি ম্যাপকে মান (Value) অনুসারে সর্ট করতে চাই। কীভাবে করবো?

asked 28 Jan, 11:01

sourav_hossain's gravatar image

sourav_hossain
1549

edited 28 Jan, 17:23


ডিফল্টভাবে ম্যাপ তার "কি" অনুসারে ডাটা সর্ট করে। এটা পরিবর্তন করার কোনো উপায় নাই।

তবে ম্যাপের ডাটাকে multimap-এ কপি করে এইভাবে সর্ট করা যায়-

#include < iostream >
#include < vector >
#include < map >

using namespace std;

int main()
{
    map <char, int> my_map;

    my_map['b'] = 20;
    my_map['a'] = 30;
    my_map['c'] = 10;

    // print map
    cout << "Sort by key" << endl;
    for(auto const it : my_map) {
        cout << it.first << " => " << it.second << endl;
    }

    multimap <int, char> mm;
    // insert data to multimap
    for(auto const &item : my_map) {
        mm.insert(make_pair(item.second, item.first));
    }
    // print value
    cout << "Sort by value" << endl;
    for(auto const &item : mm) {
        cout << item.second << " => " << item.first << endl;
    }

    return 0;
}

আউটপুটঃ

Sort by key
a => 30
b => 20
c => 10
Sort by value
c => 10
b => 20
a => 30
permanent link

answered 28 Jan, 15:23

menon's gravatar image

menon
4.7k437

edited 28 Jan, 16:36

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
75618

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×131
×18
×13
×4

question asked: 28 Jan, 11:01

question was seen: 729 times

last updated: 28 Jan, 19:27