0

ソース (int) と宛先 (int) の 2 つの属性に従って値 (int) を格納するコンテナーが必要です。つまり、ソースが宛先に何かを送信する場合、コンテナーに要素として格納する必要があります。ソースは一意の int ID (0 ~ M の整数) で識別されます。M は数十から数百の範囲で、宛先 (0 ~ N) も同様です。コンテナーは、別の関数の反復によって更新されます。

私はvector(vector(int))ソース(宛先(値))の順序で行くことを意味するを使用しています。後続のプロセスでは、このコンテナーをチェックして、特定のソースと特定の宛先の要素が存在するかどうかを確認する必要があります。空の「スペース」と塗りつぶされたスペースを区別する必要があります。コンテナが非常にまばらである可能性があります。

格納される値は 0 になる可能性があるため、container[M][N].empty() のようなことを行うことができないように見えるため、スペースが空かどうかを確認しようとしても成功しませんでした。

私はマップの経験はありませんが、マップが役立つ可能性があることを示唆する別の投稿std::map<int, int>を見たことがあり、は に似ているようvector<vector<int>>です。

要約すると:

  1. ベクトル「スペース」の特定のベクトルが空であるかどうかを確認する方法はありますか (0 と比較できないため)
  2. std::map<int, int>この目的には の方が適していますか? また、どのように使用すればよいですか?
4

3 に答える 3

3

ソース (int) と宛先 (int) の 2 つの属性に従って値 (int) を格納するコンテナが必要です

std::map<std::pair<int, int>, int>

後続のプロセスでは、このコンテナーをチェックして、特定のソースと特定の宛先の要素が存在するかどうかを確認する必要があります。空の「スペース」と塗りつぶされたスペースを区別する必要があります。

std::map::find

http://www.cplusplus.com/reference/map/map/find/

コンテナが非常にまばらである可能性があります。

std::map を使用します。コンテナの「正しい」選択は、物を見つける方法と物を挿入/削除する方法に基づいています。物事をすばやく見つけたい場合は、地図を使用してください。

于 2013-02-22T03:28:08.797 に答える
2

First of all, assuming you want an equivalent structure of vector<vector<int>>

you would want

std::map<int,std::vector<int>>

because for each key in a map, there is one unique value only.

If your sources are indexed very closely sequentially as 0...N, will be doing a lot of look-ups, and few deletions, you should use a vector of vectors.

If your sources have arbitrary IDs that do not closely follow a sequential order or if you are going to do a lot of insertions/deletions, you should use a map<int,vector<int>> - usually implemented by a binary tree.

To check the size of a vector, you use

myvec.size()

To check whether a key exists in a map, you use

mymap.count(ID) //this will return 0 or 1 (we cannot have more than 1 value to a key)

I have used maps for a while and even though I'm nowhere close to an expert, they've been very convenient for me to use for storing and modifying connections between data.

P.S. If there's only up to one destination matching a source, you can proceed with

map<int,int>

Just use the count() method to see whether a key exists before reading it

于 2013-02-22T03:18:43.833 に答える
0

ベクターを引き続き使用したいが、項目に有効な値が含まれているかどうかのチェックを追加したい場合は、 を参照してboost::optionalください。タイプは になりますstd::vector<std::vector<boost::optional<int>>>

マップを使用することもできますが、マップへのキーは 1 つだけでなく両方の ID である必要があります。

std::map<std::pair<int,int>,int>

編集:マップでの使用に十分なstd::pair比較演算子を実装します。 http://en.cppreference.com/w/cpp/utility/pair/operator_cmpを参照してください。operator<

于 2013-02-22T03:32:38.400 に答える