我想将vector与数组进行比较。向量和数组中的元素顺序不同,未排序且可以重复。例如。
以下是相同的:
vector<int> lvector = {5,7,3,1,2,7};
int larray[6] = {3,5,1,7,2,7}
下面,不一样:
vector<int> lvector = {5,7,3,1,2,7,5};
int larray[7] = {3,5,1,7,2,7,3}
这样的事情也不一样:
vector<int> lvector = {1,1,1,1,2,2};
int larray[6] = {1,1,1,1,1,2}
现在我需要检查矢量和数组是否具有相同的元素。我无法修改向量和数组,但我可以创建一个新容器并将元素从向量和数组复制到这个新容器,然后复制它们。我问这个,因为我想以有效的方式做到这一点。感谢。
答案 0 :(得分:2)
解决这个问题有很多不同的方法,每个方法都有处理和缺点。
xor
它们全部。具有不同哈希值的数组不能相等。std::unordered_multiset
您可以创建unordered_multiset
,其中包含范围内元素的频率。虽然它具有平均线性复杂度,但由于散列冲突,它可能是O(n ^ 2)。引自标准(N3337,§23.5.7.2):
复杂性:平均情况线性,最坏情况二次。
但是,您还应该记住std::unordered_set::operator==
的复杂性:
对于
unordered_set
和unordered_map
,复杂性operator==
(即,对==
运营商的呼叫数量value_type
,key_equal()
返回的谓词,以及hash_function()
由N
返回的哈希与N^2
中的N
成正比 平均情况和最差情况下的a.size()
unordered_multiset
为unordered_multimap
。对于
operator==
和sum of Ei^2
,复杂性N^2
在平均情况下与N
成正比 在最糟糕的情况下a.size()
Ei
为i
,a
为Eai
Ebi
中a
等效键组的大小。然而,如果 每对应的等效密钥对应的各个元素 群组
b
和unordered_multiset
按相同顺序排列(通常情况下) 例如,unordered_multimap
和N
是未经修改的副本 容器),然后O(N2)
的平均情况复杂度 并且#include <iostream> #include <unordered_set> #include <vector> int main() { std::vector<int> v{5, 7, 3, 1, 2, 7}; int arr[] = {3, 5, 1, 7, 2, 7}; std::unordered_multiset<int> mv(std::begin(v), std::end(v)); std::unordered_multiset<int> ma(std::begin(arr), std::end(arr)); std::cout << "Are equal? " << (mv == ma) << std::endl; return 0; }
与O(n * log(n))
成比例(但最坏情况 复杂性仍为#include <iostream> #include <algorithm> #include <vector> int main() { std::vector<int> v{5, 7, 3, 1, 2, 7}; int arr[] = {3, 5, 1, 7, 2, 7}; std::vector<int> sv(v); std::vector<int> sa(std::begin(arr), std::end(arr)); std::sort(std::begin(sv), std::end(sv)); std::sort(std::begin(sa), std::end(sa)); std::cout << "Are equal? " << (sv == sa) << std::endl; return 0; }
,例如,对于病态错误的哈希 功能)。
示例:
.line1 div {
width: 100px;
height: 100px;
background: red;
transition: width 2s;
margin:10px;
}
.line1 div:hover {
width:400px;
}
std::sort
您可以比较范围的已排序副本。根据标准(N3337,§25.4.1.1),它具有var userList = {
"active": activeUsersId,
"inactive": inactiveUsersId
}
$.ajax({
type: "POST",
data: userList,
url: "/ewaanmapbuilder/rest/user/status",
contentType: "application/json",
success: function (flag) {
if (flag == true) {
$("#messageContainer").text("Status Updated Successfully!");
}
else {
$("#messageContainer").text("Status Updation Failed!");
}
$('#messageContainer').css('display', 'block');
setTimeout(function () { $('#messageContainer').css('display', 'none'); $('.registration-container').css('margin-top', '10%') }, 3000);
}
});
复杂性:
复杂性:O(N log(N))(其中N == last-first)比较。
示例:
@ResponseBody
@RequestMapping(value = EwaanMapBuilderConstant.UPDATE_USER_STATUS, method = RequestMethod.POST,consumes= MediaType.APPLICATION_JSON_VALUE)
public boolean updateUserStatus(@RequestBody ActiveUserList userList, HttpServletRequest request) {
try {
HttpSession session = request.getSession();
String adminUserId = session.getAttribute(EwaanMapBuilderConstant.USER_ID).toString();
userService.updateUserStatus(userList, adminUserId);
}
catch(Exception e) {
logger.error("update status failed" +e);
return false;
}
return true;
}
答案 1 :(得分:2)
这是很快提出的建议的变体:
#include <iostream>
#include <unordered_set>
#include <vector>
int main()
{
std::vector<int> v{5, 7, 3, 1, 2, 7};
int arr[] = {3, 5, 1, 7, 2, 7};
std::vector<int> mv(std::begin(v), std::end(v));
std::vector<int> ma(std::begin(arr), std::end(arr));
std::sort(mv.begin(), mv.end()) ;
std::sort(ma.begin(), ma.end()) ;
std::cout << "Are equal? " << (mv == ma) << std::endl;
return 0;
}
答案 2 :(得分:0)
首先将数组转换为v1向量。
V = {1,1,2,3,4};矢量和
V1 = {1,1,2,3,4};从数组转换
angular.module("ctrl", [])
.controller("appsctrl", function ($scope) {
$scope.data = {
frontend: [{ id: 1, name: 'css' }, { id: 2, name: 'jquery' }, { id: 3, name: 'html' }, { id: 4, name: 'angularjs' }],
Server: [{ id: 1, name: 'php' }, { id: 2, name: 'ruby' }, { id: 3, name: 'c#' }, { id: 4, name: 'python' }]
};
$scope.selectvalues = function () {
angular.forEach($scope.data, function (value, key) {
$scope.values = value;
});
}
});