SixtyWithoutSchool's blog

By SixtyWithoutSchool, history, 18 months ago, In English

Heyy!!!!

Today I found something that may be useful to some of you. Maybe most of you already know this.

PS: Lets say you have a vector/array v= {1,3,2,4} and you want to iterate over it in a sorted way and you can't actually change v.

There can be many approaches for such scenario, Some of them I have listed below:

1) Copy v={1,3,2,4} into another vector tmp and then sort it and use.

2) Make an index_cum_value vector<pair<int,int>> v1= {{1,0},{3,1},{2,2},{4,3}} where first element of pair is our value and second element is the index in the original array. You can sort it on the basis of first element to get an sorted array with its original indexes intact. And by sorting on the basis of second element, you can retrieve the original array.

I personally used 2nd approach in most cases but, If you have to handle 3 or 4 array in this manners, you either have to come up with something like vector<pair<pair<pair<x,y>,z>> which is way messy to handle

OR

you can use this:

1) Create an order vector: odr= {0,1,2....n-1} and v= {1,3,2,4}

2) Now you can sort the odr vector with a custom comparator as

sort(odr.begin(),odr.end(), [&](int &i,int &j){ return v[i]<v[j];});

3) Whenever you want to access the elements in sorted order, you can access like v[odr[i]]

4) Doesn't Matter how many vectors you have, All the vectors can be easily addressed with this approach.

You can practice this approach in some of the questions:

Problem 1

Problem 2

That's It! Hope u got to know something new :)

  • Vote: I like it
  • +21
  • Vote: I do not like it

| Write comment?
»
18 months ago, # |
  Vote: I like it +10 Vote: I do not like it

My question is — why tf do u use odr instead of ord? Are you a psychopath?

  • »
    »
    18 months ago, # ^ |
      Vote: I like it +22 Vote: I do not like it

    Interesting question! The intentional use of odr instead of ord was a brain-teasing choice for me. It's a respectful tribute to the original author, whose solution inspired me to learn this :)