Вместо списка вы, вероятно, должны использовать HashSet
, тогда вы можете использовать следующий Linq для фильтрации узлов на основе локального имени
var nodeNames = new HashSet<string> { "Name", "LastName", "Color" };
foreach(var child in xdoc.Elements().Where(e => nodeNames.Contains(e.Name.LocalName)))
{
// Your code here.
}
Я пошел бы с размещением новый подход. Тогда я определил бы класс, который соответствует станд.:: allocator<> интерфейс. В теории Вы могли передать этот класс как шаблонный параметр в станд.:: vector<> и станд.:: map<> и т.д.
Остерегаются, я услышал, что выполнение таких вещей чревато трудностью, но по крайней мере Вы узнаете намного больше о STL этот путь. И Вы не должны перестраивать свои контейнеры и алгоритмы.
Существует несколько проектов, которые делают попытку чего-то подобного, например CUDPP.
Тем временем, однако, я реализовал свое собственное средство выделения, и оно работает хорошо и было просто (> 95%-й шаблонный код).
Тем временем были некоторые дальнейшие разработки (не столько с точки зрения API CUDA, но, по крайней мере, с точки зрения проектов, пытающихся использовать STL-подобный подход к Управление данными CUDA).
В частности, есть проект из исследования NVIDIA: thust