Using array or vector as a key in Map

25 views (last 30 days)
keenu
keenu on 1 Jul 2017
Edited: Bradley Stiritz on 2 Aug 2020
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...

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
Edited: Walter Roberson 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.


Bradley Stiritz
Bradley Stiritz on 2 Aug 2020
Edited: Bradley Stiritz on 2 Aug 2020
@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"

Categories

Find more on Data Type Conversion in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!