std::pairの入ったvectorのソートと重複削除 – プログラミング – Home

通知
すべてクリア

[解決済] std::pairの入ったvectorのソートと重複削除


kyu
 kyu
(@kyu)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

std::vector< std::pair< std::string, std::string > で
std::pairのfirstのみを対象にソートと重複削除をしたいです。

当初、std::mapに入れて、それをまたvectorにコピーしようと思ったのですが
効率的ではないような気がしました。そこで、

ソートはstd::sortを利用しようと思ったのですが、第3引数に渡す
比較関数をどう書けばいいのかわかりませんでした。
std::sort(v.begin(), v.end(), ??? );

また、重複削除には、std::uniqueを利用しようと思ったのですが、
第3引数に渡す二項述語関数?をどう書けばいいのかわかりませんでした。
v.erase(std::unique(v.begin(), v.end(), ???), v.end());

(std::uniqueへ渡すものは、ソートされている必要があると認識してるのですが、正しい
のでしょうか?)

STL得意な方、教えてください。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

#include <iostream>
#include <utility> // pair
#include <algorithm> // sort
#include <vector> // vector

typedef std::pair<std::string,std::string> str_pair;

struct str_pair_less {
bool operator()(const str_pair& x, const str_pair& y) const {
return x.first < y.first;
}
};

struct str_pair_equal {
bool operator()(const str_pair& x, const str_pair& y) const {
return x.first == y.first;
}
};

int main() {
std::vector<str_pair> v;
v.push_back(str_pair(zero, 0));
v.push_back(str_pair(one, 1));
v.push_back(str_pair(two, 2));
v.push_back(str_pair(three,3));
v.push_back(str_pair(four, 4));
v.push_back(str_pair(zero, れい));
v.push_back(str_pair(one, いち));
v.push_back(str_pair(two, にぃ));
v.push_back(str_pair(three,さん));
v.push_back(str_pair(four, しぃ));

std::sort(v.begin(), v.end(), str_pair_less());
std::cout << \nsorted\n;
for ( size_t i = 0; i < v.size(); ++i ) {
std::cout << v[i].first << ':' << v[i].second << std::endl;
}

v.erase(std::unique(v.begin(), v.end(), str_pair_equal()), v.end());
std::cout << \nduplicated data eliminated\n;
for ( size_t i = 0; i < v.size(); ++i ) {
std::cout << v[i].first << ':' << v[i].second << std::endl;
}

return 0;
}

> (std::uniqueへ渡すものは、ソートされている必要があると認識してるのですが、
> 正しいのでしょうか?)

YES (uniqueは'隣接する'等しい要素を削除するから)


返信引用
kyu
 kyu
(@kyu)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

うまくいきました。
どうもありがとうございました!->επιστημηさん


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました