将两个指针转换为 std::pair 的指针,如 struct

Cast two pointers to a pointer of std::pair like struct

我有以下类似于 std::pair 的简单结构。我想将两个指针 keysValues 转换为 pair 的指针。我该怎么做?

谢谢!

K* keys;
V* Values;
/*  
length of keys = length of Values
goal: operation(keys, Values) ---> pair*
*/
template <typename K, typename V, K EmptyKey = K(-1)> struct pair {
    K first;
    V second;
    static constexpr auto empty_key = EmptyKey;
    bool empty() { return first == empty_key; }
  };

您必须将 keysvalues 复制成对。

template <typename K, typename V>
pair<K, V>* KVToPairs(const K* k, const V* v, unsigned int length) {
    if (!k || !v) {
        return nullptr;
    }

    pair<K, V>* pairs = new pair<K, V>[length];
    for (unsigned int i = 0; i < length; ++i) {
        pairs[i].first = *(k + i);
        pairs[i].second = *(v + i);
    }
    return pairs;
}

demo

如果您不想要副本。也许你应该改变 pair 的定义,比如

template <typename K, typename V, K EmptyKey = K(-1)> struct pair {
    const K* first = nullptr;
    const V* second = nullptr;
    static constexpr auto empty_key = EmptyKey;
    bool empty() { return !first || *first == empty_key; }
};

pairs赋值部分外,KVToPairs功能几乎相同。

demo