С другой стороны, мне сказали, что в C++.net есть какие-то двойные списки, в которых 2-й аргумент может быть произвольным типом. TList и THashMap вроде. Если найду, наверное буду их использовать. Неохота мучиться...
Возможно, вы имели в виду generics? Это классы, параметризованные какими-нибудь типами (примерно как шаблоны в C++, но с информацией, доступной во время выполнения, 
и аккуратной реализацией). Например, типу 
vector<int> в C++ соответствует 
List<int> в .NET. Разумеется, параметров-типов может быть много: например, 
Dictionary<K, V>, реализующий доступ к значениям типа 
V, индексируя их ключами типа 
K; он реализован на хеш-таблице и, по идее, аналогичен 
hashtable из STL, но сколько у этого шаблона параметров — не знаю (если это вообще шаблонный класс). Есть ещё 
Hashtable, но это не generic, просто класс без параметров, и потому возвращает 
Object, и к нужному типу надо будет приводить. Есть ещё специализированные классы (параметры сейчас не помню, но должны быть, кроме последнего, те же, что и у 
Dictionary): 
HybridDictionary — использует хеш-таблицу при большом числе элементов и список при маленьком, 
OrderedDictionary — можно индексировать ещё и целыми числами, 
SortedDictionary — поддерживается упорядоченность записей, 
StringDictionary — оптимизирован для строк. В STL тоже должно быть разнообразие.
Кстати, имена типов в .NET не начинаются с 
T (кроме интерфейсов, которые всегда с 
I и перечислений, которые рекомендуется называть словом во множественном числе).