考虑地图mymap有条目
public class DataAccessAttribute: ActionFilterAttribute
{
public bool Disable { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Disable) return;
// Your original logic for your 95% actions goes here.
}
}
依旧......
如何删除地图中重复值的条目。
例如键'a'和'e'存在值111。因此,请保留“a”的地图条目并删除“e”的条目
对于值222,保留条目“d”并删除条目“f”和“h”
我正在寻找具有最佳空间和时间复杂度的解决方案
答案 0 :(得分:2)
你可能想要这样的东西:
#include <iostream>
#include <map>
#include <set>
int main() {
std::map<char, int> mymap
{
{'a', 111}, {'b', 567}, {'c', 956}, {'d', 222},
{'e', 111}, {'f', 222}, {'h', 222}, {'i', 492},
};
std::set<int> existingvalues;
for (auto it = mymap.begin(); it != mymap.end(); it++)
{
if (existingvalues.find(it->second) != existingvalues.end())
mymap.erase(it--); // value already encountered => remove entry
else
existingvalues.insert(it->second); // value not yet encountered => remeber it
}
for (auto it = mymap.begin(); it != mymap.end(); it++)
std::cout << "<'" << it->first << "', " << it->second << ">\n";
}
答案 1 :(得分:2)
这是一个有趣的问题,如果有点偏离主题。
因为你的地图的值是可混合的和相等的,所以我们可以在线性时间内做这个,使用<?php
try{
$connect = mysqli_connect("localhost", "root", "", "mytest");
$query = '';
$table_data = '';
$filename = "path.json";
$data = file_get_contents($filename);
$array = json_decode($data, true);
foreach($array as $row)
{
$query .= "INSERT INTO tbl_sales(sale_item, sale_qty, row_inserted_on, last_edited_on, id) VALUES ('".$row["sale_item"]."', '".$row["sale_qty"]."', '".$row["row_inserted_on"]."', '".$row["last_edited_on"]."', '".$row["id"]."') ON DUPLICATE KEY UPDATE sale_item='".$row["sale_item"]."', sale_qty='".$row["sale_qty"]."', row_inserted_on='".$row["row_inserted_on"]."', last_edited_on='".$row["last_edited_on"]."';";
}
mysqli_multi_query($connect, $query);
echo "<h1>All data appeded </h1>";
} catch(Exception $e){
echo $e->getMessage();
}
?>
来确定之前是否看到了这个值:
此代码为c ++ 17:
unordered_set
答案 2 :(得分:1)
这是另一个可能的解决方案,涉及迭代地图容器2次,如果有重复值,第二次将有更少的元素迭代:
@RealmModule(fieldNamingPolicy
#include <iostream>
#include <algorithm>
#include <map>
template <typename T, typename U>
void RemoveDuplicateValues(std::map<T, U> &m)
{
std::map<U, T> tmp;
std::for_each(m.rbegin(), m.rend(), [&tmp](auto const &p)
{
tmp[p.second] = p.first;
});
m.clear();
for (auto const &p : tmp)
m[p.second] = p.first;
}
int main()
{
std::map<char, int> m
{
{ 'a', 111 },{ 'b', 567 },{ 'c', 956 },{ 'd', 222 },
{ 'e', 111 },{ 'f', 222 },{ 'h', 222 },{ 'i', 492 }
};
RemoveDuplicateValues(m);
// test
for (auto const &p : m)
std::cout << p.first << " " << p.second << std::endl;
return 0;
}