- masashinakata
- 947
- 3
- 0
- 0
koyumeishi
@koyumeishi_
a.rbegin().base() == a.end(); // true (++a.rbegin()).base() == --a.end(); // true みたいな関係にあるらしく、一つ動かさないといけないの面倒だ
2015-11-25 04:32:46
agw
@masashinakata
std::multiset<int> ms{1, 2, 3, 1, 2, 3}; ms.erase(std::prev(std::end(ms))); というソリューションを発見した(C++11から) stackoverflow.com/questions/1946…
2015-11-25 09:22:08
Hideyuki Tanaka
@tanakh
mapでmultisetやると、要素数0になったときにちゃんと消さないとめんどくさいし、ちゃんと消す処理入れるのもめんどいから、multiset便利なんだよな~(´・_・`)
2015-12-13 22:45:31
Hideyuki Tanaka
@tanakh
ぶっちゃけstd::multisetのcountが要素数に比例してるくそみたいな実装になってる理由がよくわからんのだけどっ、なんでだろうなあ。
2015-12-13 22:46:45
Hideyuki Tanaka
@tanakh
stdのred-black treeのノードに子ノードの個数持たせなければ効率よく実装できないし、countのためだけにそれやるのはよくないと言う判断かな~。でも子ノードの数持たせればindexアクセスもできたり便利なんだよな~。そういうmultisetもほしいな。
2015-12-13 22:47:56
Hideyuki Tanaka
@tanakh
ms.erase(ms.find(v)) まあこうなるんだけどこれはこれでms.end()返した場合に死ぬからあれなんだよな~。いまいちインターフェースがかみ合ってないな~
2015-12-13 22:48:30