MATLAB Answers

Using array or vector as a key in Map

40 views (last 30 days)
keenu
keenu on 1 Jul 2017
Edited: Brad Stiritz on 2 Aug 2020 at 16:33
In C++ we can use arrays or vector as a key against to a int value like: map<vector<int> ,int > m; Can I do same in MATLAB by containers.Map(keySet,valueSet) or by other means?? If yes,please post code. Thanks...

  0 Comments

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 1 Jul 2017
Yes. The very first example at https://www.mathworks.com/help/matlab/ref/containers.map-class.html shows using a string as a key.

  2 Comments

keenu
keenu on 1 Jul 2017
I think you don't understand my question. I want to use vector or array as the key against int value like:
[2,3,4]->1 [5,4]->2 [1,9,10,12]->3 [7]->4
and so on.....
Can now you help me????
Walter Roberson
Walter Roberson on 1 Jul 2017
In that case, you can sprintf() the vector into a string and use the string as the index.
Alternately, you could use one of the Serialization routines in the File Exchange to construct a byte array representing the arbitrary object you wish to use to index, and then convert the byte array to a string. I do not know at the moment whether using char(0) in a key would be permitted, but certainly converting to hex would work.

Sign in to comment.


Brad Stiritz
Brad Stiritz on 2 Aug 2020 at 14:36
Edited: Brad Stiritz on 2 Aug 2020 at 16:33
@Walter-- I couldn't get your sprintf() suggestion to work, maybe I didn't understand you? I have included my own proposed solution below--
% Create simple Map object with keys and values
>> CMap_ = containers.Map(["1","2"],["A","B"])
CMap_ = Map with properties:
Count: 2
KeyType: char
ValueType: char
% Create a vector of keys, for which we want a corresponding output vector of values.
% Note column vector usage, important below.
>> key_vector = ["2";"1";]
key_vector = 2×1 string array
"2"
"1"
% For input key vector ["2"; "1";], we expect to get output values vector ["B"; "A";].
% However, this fails--
>> CMap_(key_vector)
Error using containers.Map/subsref
Specified key type does not match the type expected for this
container.
% Walter> "sprintf() the vector into a string and use the string as the index"
% We use strjoin() for simplicity here--
>> mashup_key = strjoin(key_vector,"")
mashup_key = "21"
% Concatenated key doesn't exist within the Map
>> CMap_(mashup_key)
Error using containers.Map/subsref
The specified key is not present in this container.
% My own proposed workaround solution--
>> string(arrayfun(@(x)CMap_(x),key_vector))
ans = 2×1 string array
"B"
"A"

  0 Comments

Sign in to comment.

Tags