- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IDの自動採番について)
最も効率的なIDの自動採番方法について
このQ&Aのポイント
- 各要素に自動的にIDを採番する方法について調査しています。要素は連想配列に格納され、一つずつ配列に追加されます。削除した要素のIDを次に追加する要素で再利用したいです。
- IDの最大値を最小化したいため、要素を削除した際にID値を前に詰めることはできません。連想配列を使用して実装し、要素の追加時に空きIDを探して割り当てる方法を検討しています。
- シンプルにIDの自動採番を実現するためのクラスや方法を探しています。外部ソフトウェアは使用せずに実現したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>これが最もスマートなやり方でしょうか? さあ? 私が今思いつくなかでスマートな方法を紹介したつもりなので それよりスマートな方法がないか問われましても・・・ ただ「その削除済みリストを参照して最も若いIDを使用すれば」は、 質問内容からすると最も若いIDの必要はないんじゃないかとは思いますが。 条件によりますが オブジェクトのポインタ値を、そのままIDとして使用する手もありますが。
その他の回答 (2)
- duke_kimura
- ベストアンサー率39% (53/134)
回答No.3
何をもって「効率的」とするのでしょうか? 一般的には、おそらくC++ということで、普通にSTLで実装すれば良いんじゃないでしょうか。 もしこのリストが、極端に規模が大きい物であれば、 C言語で記述して多分探索木で実装するのが高速です。
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.1
削除されたIDも管理してあげればよいのでは?
質問者
お礼
早速のご回答ありがとうございます。 なるほど、そういうことですよね。 削除済みIDリストを別の配列として持っておいて、要素削除の時点でIDをそのリストに追加し、次に要素を追加する時点で、その削除済みリストを参照して最も若いIDを使用すれば良いということですね。 削除済みがなければ、(本配列のサイズ+1)を新たなIDとして採番し、追加する。 これが最もスマートなやり方でしょうか?
質問者
補足
質問に間違った記述がありました。 >このように常に「IDの最大値=配列のサイズ」となるようにしておきたいのです。 これは必ずしもこのようにはなりません。この一文は無視してください。
お礼
ご回答ありがとうございます。 オブジェクトのポインタ値をそのままIDにすれば、確かにユニーク値になるとは思いますが、ランダムな値ではそれに依存したコードが書けません。 確かに最小のIDを使用する必要はありませんね。リストの先頭から再利用すれば良いと思います。 やり方については他の方にも意見を求めたかったので。