[C++] pair vector๋ฅผ sort! ๋๋ฒ์งธ๊ฐ์ ๊ธฐ์ค์ผ๋ก๋ ์ ๋ ฌ ๊ฐ๋ฅํ๋ค๊ฑฐ!
vector<pair<int, int> > v1;
vector<pair<string, int>> v2;
vector<pair<int, double>> v3;
์ขํ, ์ด๋ฆ์ด ๋ฐ๋ก ์๋ ์ซ์ ๋ฑ์ ๋ด์ ๋ ์์ฃผ ์ฐ๋ pair๋ก ์ด๋ฃจ์ด์ง ๋ฒกํฐ๋ฅผ ์ ๋ ฌํ๊ณ ์ ํ๋ค..!
// test.cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<pair<int, int> > v;
v.push_back(make_pair(1, 2));
v.push_back(make_pair(1, 0));
v.push_back(make_pair(2, 0));
v.push_back(make_pair(2, 2));
sort(v.begin(), v.end());
for (int i = 0; i < 4; ++i)
{
cout << v[i].first << " " << v[i].second << "\n";
}
}
์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด
// output of test.cpp
1 0
1 2
2 0
2 2
์ด์ฒ๋ผ first ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, first ๊ฐ์ด ๊ฐ์ ๋๋ second ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์. ์ด ๊ท์น์ ๊ฐ์ง๊ณ ์ ๋ ฌ๋๋ค.
๊ทผ๋ฐ!! ์ฌ๊ธฐ์ ์กฐ๊ธ ๋ ๊น๊นํ ๊ธฐ์ค์ ๋ฃ๊ณ ์ถ๋ค๋ฉด..?
์๋ฅผ ๋ค์ด first ๊ฐ์ ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋, first ๊ฐ์ด ๊ฐ์ ๋๋ second ๊ฐ์ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด!?
ํด๊ฒฐ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค!
sort ํจ์์ ์ธ๋ฒ์งธ ์ธ์๋ก ์๊ธฐ๊ฐ ์ํ๋ ๊ธฐ์ค์ ๋ฆฌํดํ๋ boolean ํจ์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์์์ ์ธ๊ธํ ๊ทธ ๊ธฐ์ค์ ์ง์ ๋ง๋ค์ด๋ณด์.
// modified_test.cpp
bool compare(const pair<int, int> &a, const pair<int, int> &b)
{
if (a.first == b.first) // first ๊ฐ์ด ๊ฐ๋ค๋ฉด?
{
return a.second > b.second; second ๊ฐ์ด ๋ ํฐ๊ฒ ์์ผ๋ก ๊ฐ๊ฒ ํด๋ผ!
}
return a.first < b.first; // first ๊ฐ์ด ๊ฐ์ง ์๋ค๋ฉด ๋ ํฐ ๊ฐ์ด ๋ค๋ก ๊ฐ๊ฒ ํด๋ผ!
}
์ด๋ฌํ ํจ์๋ฅผ sort ํจ์ ์ธ๋ฒ์งธ ์ธ์๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์๋์ฒ๋ผ ๋ง์ด๋ค!
sort(v.begin(), v.end(), compare);
์ด๋ ๊ฒ ๊ท์น์ ๋ฃ์ด์ฃผ๋ฉด ์๊น์ ์คํ ๊ฒฐ๊ณผ๋ ์ฐ๋ฆฌ์ ์๋๋๋ก ์๋์ ๊ฐ์ด ๋ณํ๊ฒ ๋๋ค!
// output of modified_test.cpp
1 2
1 0
2 2
2 0
bool compare(const pair<int, int> &a, const pair<int, int> &b)
{
if (a.first == b.first)
{
return a.second > b.second;
}
return a.first < b.first;
}
์์์ ์ถ๊ฐํด์คฌ๋ ํจ์๋ฅผ ๋ ์๋ฟ๊ฒ ์ดํดํ๋ ค๋ฉด a๋ฅผ ์ ๋ ฌ๋ ๋ฒกํฐ ๊ธฐ์ค ์์ ์์, b๋ฅผ ๋ค์ ์์๋ผ๊ณ ๊ฐ์ ํ๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ฐ๋ฆฌ์ ์๋๋๋ก ์ ๋ ฌ๋ ๋ฒกํฐ๋ผ๋ฉด..
๋ ์์์ first ๊ฐ์ด ๊ฐ์ง ์๋ค๋ฉด ์์ ์๋ ์์(a)์ fisrt ๊ฐ์ด ๋ ์์ ๊ฒ์ด๋ค. ์ด๋ ์ ์ฝ๋์์ if ๋ฌธ์ ํด๋นํ์ง ์์ผ๋ ๊ฐ์ฅ ์๋์ return ๋ฌธ์ด ์คํ๋ ๊ฒ์ด๋ค. ์ด๋ ์์ ์๋ ์์(a)์ first ๊ฐ์ด ๋ค์ ์ค๋ ์์(b)์ first ๊ฐ๋ณด๋ค ์๊ฒ ํด! ๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ ์์์ first ๊ฐ์ด ๊ฐ๋ค๋ฉด ์์ ์๋ ์์(a)์ second ๊ฐ์ด ๋ค์ ์ค๋ ์์(b)์ second ๊ฐ๋ณด๋ค ์์ ๊ฒ์ด๋ค. ์ด๋ ์ ์ฝ๋์์ if๋ฌธ์ ํด๋นํ๊ฒ ๋๊ณ , ์กฐ๊ฑด๋ฌธ ์์ return ๋ฌธ์ด ์คํ๋ ๊ฒ์ด๋ค. ์ด๋ ์์ ์๋ ์์(a)์ second ๊ฐ์ด ๋ค์ ์ค๋ ์์(b)์ second ๊ฐ๋ณด๋ค ํฌ๊ฒ ํด! ๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[c++] scanf & cin ์๋ ์ฐจ์ด(์ ๋ ฅ ์๊ฐ ์ด๊ณผ)
[c++] scanf & cin ์๋ ์ฐจ์ด(์ ๋ ฅ ์๊ฐ ์ด๊ณผ)
2021.08.27 -
[C++] pair vector๋ฅผ sort! ๋ค์ด์จ ์์๋ ๊ธฐ์ค์ผ๋ก ๋ ์ ์๋ค๊ฑฐ!
[C++] pair vector๋ฅผ sort! ๋ค์ด์จ ์์๋ ๊ธฐ์ค์ผ๋ก ๋ ์ ์๋ค๊ฑฐ!
2021.08.06 -
[MAC] bits/stdc++.h ์ฌ์ฉํ๋ ๋ฒ
[MAC] bits/stdc++.h ์ฌ์ฉํ๋ ๋ฒ
2021.07.30 -
[C++]๋ฐฑ์ค 1100๋ฒ ํ์ ์นธ
[C++]๋ฐฑ์ค 1100๋ฒ ํ์ ์นธ
2020.07.14