• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IDの自動採番について)

最も効率的なIDの自動採番方法について

このQ&Aのポイント
  • 各要素に自動的にIDを採番する方法について調査しています。要素は連想配列に格納され、一つずつ配列に追加されます。削除した要素のIDを次に追加する要素で再利用したいです。
  • IDの最大値を最小化したいため、要素を削除した際にID値を前に詰めることはできません。連想配列を使用して実装し、要素の追加時に空きIDを探して割り当てる方法を検討しています。
  • シンプルにIDの自動採番を実現するためのクラスや方法を探しています。外部ソフトウェアは使用せずに実現したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>これが最もスマートなやり方でしょうか? さあ? 私が今思いつくなかでスマートな方法を紹介したつもりなので それよりスマートな方法がないか問われましても・・・ ただ「その削除済みリストを参照して最も若いIDを使用すれば」は、 質問内容からすると最も若いIDの必要はないんじゃないかとは思いますが。 条件によりますが オブジェクトのポインタ値を、そのままIDとして使用する手もありますが。

katorea21
質問者

お礼

ご回答ありがとうございます。 オブジェクトのポインタ値をそのままIDにすれば、確かにユニーク値になるとは思いますが、ランダムな値ではそれに依存したコードが書けません。 確かに最小のIDを使用する必要はありませんね。リストの先頭から再利用すれば良いと思います。 やり方については他の方にも意見を求めたかったので。

その他の回答 (2)

回答No.3

何をもって「効率的」とするのでしょうか? 一般的には、おそらくC++ということで、普通にSTLで実装すれば良いんじゃないでしょうか。 もしこのリストが、極端に規模が大きい物であれば、 C言語で記述して多分探索木で実装するのが高速です。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

削除されたIDも管理してあげればよいのでは?

katorea21
質問者

お礼

早速のご回答ありがとうございます。 なるほど、そういうことですよね。 削除済みIDリストを別の配列として持っておいて、要素削除の時点でIDをそのリストに追加し、次に要素を追加する時点で、その削除済みリストを参照して最も若いIDを使用すれば良いということですね。 削除済みがなければ、(本配列のサイズ+1)を新たなIDとして採番し、追加する。 これが最もスマートなやり方でしょうか?

katorea21
質問者

補足

質問に間違った記述がありました。 >このように常に「IDの最大値=配列のサイズ」となるようにしておきたいのです。 これは必ずしもこのようにはなりません。この一文は無視してください。