C++ 構造体のソート

今回の話

自分の備忘録として

AOJプロコンの練習をしている時にソートしたい!

・・・が,構造体のソートをしたことがなかったので今回書いてみた.

構造体のソート

vectorのソート

単純にvectorなどをソートする際には以下で簡単にできる.

#include <vector>
#include <algorithm>

vector<int> v;
 
// 昇順ソート
sort(v.begin(), v.end());

降順ソートがしたければ3番目の引数にソートの基準を入れてあげればいい.

// 降順ソート
sort(v.begin(), v.end(), std::greater<int>());

構造体のソート

int などは大小関係が決まっているためsortで並べ替えることができる.

すなわち構造体でも大小関係を決定する,または大小関係の定義をsortに渡してやればよい.

大小関係を定義する場合
struct data{
    int num;
    string str;

    bool operator<(const data& right) const{
        return num == right.num ? str < right.str : num < right.num
    }
}; 
方法を定義する場合
bool comp( const data& l, const data& r){
    return l.num == r.num ? l.str < r.str : l.num < r.num
}

上記をソートの第3引数に与えれば良い

今回は方法を定義する方法で実際に実装してみた.
ちなみに,ソートはクイックソートを使っているらしい.

MinGW + Clion でエラーが出た話

makeとかそのあたり詳しくないので今日使ってて困ったことと

とりあえず解決はした話.

設定できないとコードのカラーとかも変わらないので不便.

いずれはちゃんと解説できるようにはなりたい・・・

 

本題

エラーの確認とパスの削除

Clion で新しくプロジェクトを作成した際に以下のエラーが発生

sh.exe is found in your PATH .......

sh.exeがパスの通ったところにあるのが問題らしいから探したら通してた

....\MinGW\mingw32\bin

のでそれを削除,clion 再起動!・・・・またでる.

 

CMakeLists.txtの変更

clionではmakeの設定を上記テキストに書く部分があるのでそこに以下を追記.

set (PATH=%PATH:...\MinGW\bin=%)

これでやるとうまくいって,見た目とかも ちゃんと整って快適快適.

 

原因

くわしいことはわからないがmake.exeの呼ぶコマンドシェルがsh.exeが優先されることらしい.ので呼ぶ先を変えることでうまく動くらしい.

 

 

あまり詳しくはわからなかったので後日ちゃんと調べたい

 

 

bash on Windows を使いやすくした話

しばらくmacを使っていて久々にwindowsに戻ったので

自分が使いやすいようにbash on windows の設定をしてみた.

 

今回は tmux + zsh を導入してログインした時に両方が起動するようにした.

(次回があるかどうかは不明)

 

開発者モードにしてごにょごにょしてbashが入ったらとりあえず以下を実行

$ sudo apt install -y zsh tmux 

 tmuxは初期から入っているみたいでzshがインストールされる.

 

 tmux + zshbash on windows を起動するには

tmux を起動してtmuxからzshを呼べばいいらしい.

のでその設定をする.

 

bash on windows 右クリック → ファイルの場所を開く → ショートカットのプロパティ

リンク先の部分を以下のように変更

 C:\Windows\System32\bash.exe ~

      ↓

C:\Windows\System32\bash.exe ~ -c tmux

これで起動するとtmuxで起動される.

 

次にホームディレクトリ下の.tmux.confを編集(なければ作成)

以下を記載

set-option -g default-shell /bin/zsh

念のためログインシェルも変更しておく.

$ chsh

/(zshが入ってるパス)

 

これで完了.tmux + zsh で起動ができる.

なんか立ち上がりが遅い気がするけど落とすことが少ないので現時点では気にしない

こんな感じでうまくできた

f:id:yuunoza:20170221233246p:plain

 

zshの設定とかもいじったのでそこも今後かけたらいいなあ