Using array or vector as a key in Map

56 views (last 30 days)
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 shows using a string as a key.
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
% 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
% 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


Community Treasure Hunt

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

Start Hunting!