我有两个向量要合并为一个。两者都是嵌入式对向量(以便能够在一对中容纳3个int值),并且它们的大小互不相同。
两个对向量和合并向量的代码为:
**Table.Vue(child, generic-table)**
<table class="table table-bordered">
<thead>
<tr>
<th v-for="col in options.cols" :key="col.id">
<template v-if="col.colRenderer">
{{col.colRenderer(col)}}
</template>
<template v-else>
{{col.label}}
</template>
</th>
</tr>
</thead>
<tbody>
<tr v-for="datum in data" :key="datum.id" @click="(e)=> options.rowProps.onClick ? options.rowProps.onClick(e, datum): ''">
<td v-for="col in options.cols" :key="col.id" @click="()=> col.onClick ? col.onClick(datum[col.dataKey]): ''">
<template v-if="col.cellSlot">
<slot :name="col.cellSlot.name" :data="datum[col.dataKey]"/>
</template>
<template v-else>
{{datum[col.dataKey]}}
</template>
</td>
</tr>
</tbody>
</table>
**Calling component(Parent, with Custom Data cells)**
<v-table
:name="carePlanName"
:options="tableProps"
:total-count="totalCount"
:data="users" >
<div
slot=""
slot-scope="slotProps">
<!-- Define a custom template for CellData Data -->
<!-- `slotProps` to customize each todo. -->
<span v-if="slotProps">✓
<button>{{ slotProps.name }}</button>
</span>
</div>
</v-table>
其中sizeOfFinalVect等于parentVect + childVect的大小。
parentVect = {(0 3 9),(1 3 9),(2 2 15)}
childVect = {(0 1 9)}
我跑步时:
vector < pair<int, pair<int,int> > > parentVect;
vector < pair<int, pair<int,int> > > childVect;
vector < pair<int, pair<int,int> > > mergedVect;
(我知道forloop不会“合并”两者,我想检查它是否至少将parentVect对添加到mergedVect中)
我的输出是:
mergedVect = {(0 0 0),(0 0 0),(0 0 0)}
向量按对中的最后一个整数排序,所以我想要的输出是:
mergedVect = {(0 3 9),(1 3 9),(0 1 9),(2 2 15)}
对此非常感谢!
编辑:
使用合并:
for(int i=0; i<mergedVect.size();i++){
mergedVect.push_back(make_pair(parentVect[i].second.second, make_pair(parentVect[i].second.first, parentVect[i].first)));
}
我的输出是 mergedVect = {(0 1 9),(0 3 9),(1 3 9),(2 2 15)}
答案 0 :(得分:1)
如果要将两个排序的序列合并为一个序列,则应该利用的算法功能是std::merge。
以下是使用您的数据的示例:
#include <vector>
#include <utility>
#include <iostream>
#include <algorithm>
#include <iterator>
typedef std::pair<int, int> PairInt;
typedef std::pair<int, PairInt> PairPairInt;
typedef std::vector<PairPairInt> PairVect;
// lambda that compares the pairs on the last value in the pair sequence
auto comparer = [](const PairPairInt& p1, const PairPairInt& p2) {return p1.second.second < p2.second.second; };
int main()
{
PairVect parentVect = { { 0,{ 3, 9 } },{ 1,{ 3, 9 } },{ 2,{ 2, 15 } } };
PairVect childVect = { { 0,{ 1, 9 } } };
PairVect mergedVect;
// First, sort the sequences based on the criteria that the
// last number in the pairs is sorted in ascending order
std::sort(parentVect.begin(), parentVect.end(), comparer);
std::sort(childVect.begin(), childVect.end(), comparer);
// Now merge the two sequences above, using the same sorting criteria
std::merge(parentVect.begin(), parentVect.end(),
childVect.begin(), childVect.end(),
std::back_inserter(mergedVect), comparer);
for (auto& p : mergedVect)
std::cout << "{" << p.first << " " << p.second.first << " " << p.second.second << "}\n";
}
输出:
{0 3 9}
{1 3 9}
{0 1 9}
{2 2 15}
请注意std::sort
的用法,因为std::merge
需要排序范围。