Using array or vector as a key in Map
26 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (2)
Walter Roberson
le 1 Juil 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 commentaires
Walter Roberson
le 1 Juil 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.
Bradley Stiritz
le 2 Août 2020
Modifié(e) : Bradley Stiritz
le 2 Août 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"
0 commentaires
Voir également
Catégories
En savoir plus sur Data Type Conversion dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!